LyoqCiogQGZpbGUgY2ZnX2FwaS5oCiogQGJyaWVmIG52vdO/2s23zsS8/goqCiogQ29weXJpZ2h0IChDKSAyMDE3IFNhbmVjaGlwcyBUZWNobm9sb2d5IENvLiwgTHRkLgoqCiovCgojaWZuZGVmIF9DRkdfQVBJX0gKI2RlZmluZSBfQ0ZHX0FQSV9ICgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgaGVhZGVyIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqCiogQGJyaWVmILvxyKHWuLao19a2zrbU06a1xNa1CiogQHBhcmFtIG5hbWUgICAgIMjrss6jrNfWts7D+woqIEBwYXJhbSBidWYgICAgICCz9rLOo6y05rfF19a2zrbU06bK/b7dtcS7urPlx/jWuNXrCiogQHBhcmFtIGxlbiAgICAgIMjrss6jrLu6s+XH+GJ1ZrOktsgKKiBAcmV0dXJuIDCjurPJuaajrC0xo7rKp7DcCiogQHJldHZhbCAwICCzybmmCiogQHJldHZhbCAtMSDKp7DcCiogQG5vdGUKKiBAd2FybmluZwoqLwppbnQgc2NfY2ZnX2dldChjaGFyICpuYW1lLCBjaGFyICpidWYsIGludCBidWZMZW4pOwoKLyoqCiAqIEBicmllZiDJ6NbD1ri2qNfWts621NOmtcTWtQogKiBAcGFyYW0gbmFtZSAgICAgICDI67LOo6zX1rbOw/sKICogQHBhcmFtIHZhbHVlICAgICAgyOuyzqOsz+vSqrTmtKK1xMr9vt0KICogQHJldHVybiAwo7qzybmmo6wtMaO6yqew3AogKiBAcmV0dmFsIDAgILPJuaYKICogQHJldHZhbCAtMSDKp7DcCiAqIEBub3RlICAgY2ZnX3NldL32yejWw7W9xNq05qOstffTw2NmZ19zYXZlssW74bGjtOa1vc7EvP6jrLLFu+HW2Mb0yfrQpwogKiBAd2FybmluZyAgvfbU2nBhcmFtZXRlctbQtcRudrLFu+G19LXnsaO05qOsxuTL+73UytPOqsHZyrFudgogKi8KaW50IHNjX2NmZ19zZXQoY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOwoKLyoqCiAqIEBicmllZiDJvrP91ri2qNfWts4KICogQHBhcmFtIG5hbWUgICAgIMjrss6jrNfWts7D+wogKiBAcmV0dXJuIDCjurPJuaajrC0xo7rKp7DcCiAqIEByZXR2YWwgMCAgs8m5pgogKiBAcmV0dmFsIC0xIMqnsNwKICogQG5vdGUKICogQHdhcm5pbmcKICovCi8vaW50IHNjX2NmZ191bnNldChjaGFyICpuYW1lKTsKCi8qKgogKiBAYnJpZWYgx+W/1cirsr/X1rbOtOa0otDFz6IKICogQHBhcmFtCiAqIEByZXR1cm4gMKO6s8m5pqOsLTGjusqnsNwKICogQHJldHZhbCAwICCzybmmCiAqIEByZXR2YWwgLTEgyqew3AogKiBAbm90ZQogKiBAd2FybmluZyC71ri0s/azp9DFz6LKsbX308MKICovCmludCBzY19jZmdfcmVzZXQodm9pZCk7CgovKioKICogQGJyaWVmILTy06HP1Mq+y/nT0MXk1sPP7tDFz6K1vb/Y1sbMqAogKiBAcGFyYW0KICogQHJldHVybiAwo7qzybmmo6wtMaO6yqew3AogKiBAcmV0dmFsIDAgILPJuaYKICogQHJldHZhbCAtMSDKp7DcCiAqIEBub3RlCiAqIEB3YXJuaW5nCiAqLwppbnQgc2NfY2ZnX3Nob3codm9pZCk7CgovKioKICogQGJyaWVmILGjtObIq7K/xeTWw8r9vt21vc7EvP4KICogQHBhcmFtCiAqIEByZXR1cm4gMKO6s8m5pqOsLTGjusqnsNwKICogQHJldHZhbCAwICCzybmmCiAqIEByZXR2YWwgLTEgyqew3AogKiBAbm90ZSBjZmdfc2F2ZbX308O686OsxeTWw7XEyv2+3dbYxvS687u5xNzJ+tCnCiAqIEB3YXJuaW5nCiAqLwppbnQgc2NfY2ZnX3NhdmUodm9pZCk7CgojaWZuZGVmIExJQk5WUkFNX0FQSV9ORVcKaW50IGNmZ19nZXRfaXRlbShjaGFyICpuYW1lLCBjaGFyICpidWYsIGludCBidWZMZW4pOwppbnQgY2ZnX3NldChjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7Ci8vaW50IGNmZ191bnNldChjaGFyICpuYW1lKTsKaW50IGNmZ19yZXNldCh2b2lkKTsKaW50IGNmZ19zaG93KHZvaWQpOwppbnQgY2ZnX3NhdmUodm9pZCk7CiNlbmRpZgoKLyoqCiAqIEBicmllZiBzeXN0ZW3Ptc2ztffTw7fi17C907/aCiAqIEBwYXJhbSBjbWQgIMjrss4gIMP8we4KICogQHJldHVybiAwo7qzybmmo6wtMaO6yqew3AogKiBAcmV0dmFsIDAgILPJuaYKICogQHJldHZhbCAtMSDKp7DcCiAqIEBub3RlIAogKiBAd2FybmluZwogKi8KZXh0ZXJuIGludCB6eGljX3N5c3RlbShjb25zdCBjaGFyICpjbWQpOwoKZXh0ZXJuIGludCB6eGljX3N5c3RlbV9vdXRkYXRhKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqb3V0ZmlsZSwgY2hhciAqb3V0X2RhdGEsIGludCBvdXRfbGVuKTsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgSW5saW5lIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNlbmRpZiAgLy8gI2lmbmRlZiBfQ0ZHX0FQSV9ICgo=