ZGlmZiAtLWdpdCBhL2NwL3BzL3BsYXQvaW5jL29zcy9vc19vc2UuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc19vc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVmMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zX29zZS5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgIi4uL29zc19hcGkuaCINCisNCmRpZmYgLS1naXQgYS9jcC9wcy9wbGF0L2luYy9vc3Mvb3Nfd2luLmggYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3Nfd2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1ZjFiNAotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc193aW4uaApAQCAtMCwwICsxLDIgQEAKKyNpbmNsdWRlICIuLi9vc3NfYXBpLmgiDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL29zYV9hcGkuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc2FfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1ZjFiNAotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc2FfYXBpLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSAiLi4vb3NzX2FwaS5oIg0KKw0KZGlmZiAtLWdpdCBhL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfYXBpLmggYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NWYxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX2FwaS5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgIi4uL29zc19hcGkuaCINCisNCmRpZmYgLS1naXQgYS9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX2NsaWIuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfY2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMWM4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX2NsaWIuaApAQCAtMCwwICsxLDI3OSBAQAorLyoqDQorICogQGZpbGUgb3NzX2NsaWIuaA0KKyAqIEBicmllZiBDv+LNt87EvP4NCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4NCisgKiANCisgKi8NCisjaWZuZGVmIF9PU1NfQ0xJQl9IDQorI2RlZmluZSBfT1NTX0NMSUJfSA0KKw0KKyNkZWZpbmUgX1VTRV9DTElCDQorDQorI2lmZGVmIF9VU0VfQ0xJQg0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGhlYWRlciBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZiBkZWZpbmVkIChfT1NfTElOVVgpDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KKyNlbHNlDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8YXNzZXJ0Lmg+DQorI2luY2x1ZGUgPHRpbWUuaD4NCisjaW5jbHVkZSA8bWF0aC5oPg0KKyNpbmNsdWRlIDxjdHlwZS5oPg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfT1NfV0lODQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNlbmRpZg0KKyNpbmNsdWRlICJvc3NfcHViLmgiDQorI2luY2x1ZGUgIm9zc19jb21waWxlci5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyINCit7DQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm8gZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9PU19MSU5VWA0KKy8qDQorICogc3RkaW8uaA0KKyAqLw0KKyNkZWZpbmUgcHJpbnRmKGZtdCwgLi4uKSAgcHJpbnRrKGZtdCwgIyNfX1ZBX0FSR1NfXykNCisNCisvKg0KKyAqIHJhbmRvbQ0KKyAqLw0KKyNkZWZpbmUgUkFORF9NQVggICAgICAgICgweDdGRkZGRkZGKQ0KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsMTQsMCkpDQorIyBkZWZpbmUgc3JhbmQocykgICAgICAgIHByYW5kb21fc2VlZChzKQ0KKyMgZGVmaW5lIHJhbmQoKSAgICAgICAgICAocHJhbmRvbV91MzIoKSAmIFJBTkRfTUFYKQ0KKyNlbHNlDQorIyBkZWZpbmUgc3JhbmQocykgICAgICAgIHNyYW5kb20zMihzKQ0KKyMgZGVmaW5lIHJhbmQoKSAgICAgICAgICAocmFuZG9tMzIoKSAmIFJBTkRfTUFYKQ0KKyNlbmRpZg0KKw0KKy8qDQorICogc3RkbGliLmgNCisgKi8NCisjZGVmaW5lIGF0b2wobnB0cikgICAgICBzaW1wbGVfc3RydG9sKG5wdHIsIChjaGFyICoqKU5VTEwsIDEwKQ0KKyNkZWZpbmUgYXRvaShucHRyKSAgICAgIHNpbXBsZV9zdHJ0b3VsKG5wdHIsIChjaGFyICoqKU5VTEwsIDEwKQ0KKw0KKyNkZWZpbmUgc3RydG9sICAgICAgICAgIHNpbXBsZV9zdHJ0b2wNCisjZGVmaW5lIHN0cnRvdWwgICAgICAgICBzaW1wbGVfc3RydG91bA0KKw0KKyNkZWZpbmUgbWFsbG9jKHNpemUpICAgIGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQykNCisjZGVmaW5lIGZyZWUocHRyKSAgICAgICBrZnJlZShwdHIpDQorDQorLyoNCisgKiBhc3NlcnQuaA0KKyAqLw0KKyNkZWZpbmUgYXNzZXJ0KGV4cCkgICAgIHpPc3NfQVNTRVJUKGV4cCkNCisNCisvKg0KKyAqIHRpbWUNCisgKi8NCisjZGVmaW5lIHNldHRpbWVvZmRheSAgICBzeXNfc2V0dGltZW9mZGF5DQorDQorLyoNCisgKiB1bmlzdGQuaA0KKyAqLw0KKyNkZWZpbmUgZXhpdChucikgICAgICAgIGRvX2V4aXQobnIpDQorDQorI2RlZmluZSB6T3NzX01hbGxvYyhzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQykgIA0KKyNkZWZpbmUgek9zc19NYWxsb2NFeChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9QQUdFTU9ERU0pDQorI2RlZmluZSB6T3NzX1JlYWxsb2MobWVtX3B0ciwgbmV3X3NpemUpICAgICAgICAgICAgIGtyZWFsbG9jKG1lbV9wdHIsIG5ld19zaXplLCBHRlBfQVRPTUlDKQ0KKyNkZWZpbmUgek9zc19GcmVlKG1lbV9wdHIpICAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShtZW1fcHRyKSANCisjZGVmaW5lIHpPc3NfTWVtY3B5KGRlc3RfcHRyLCBzcmNfcHRyLCBzaXplKSAgICAgICAgbWVtY3B5KGRlc3RfcHRyLCBzcmNfcHRyLCBzaXplKQ0KKyNkZWZpbmUgek9zc19NZW1zZXQoZGVzdF9wdHIsIHZhbHVlLCBzaXplKSAgICAgICAgICBtZW1zZXQoZGVzdF9wdHIsIHZhbHVlLCBzaXplKQ0KKyAgICANCisjZGVmaW5lIHpPc3NfTWVtbW92ZShkZXN0X3B0ciwgc3JjX3B0ciwgY291bnQpICAgICAgbWVtbW92ZShkZXN0X3B0ciwgc3JjX3B0ciwgY291bnQpDQorI2RlZmluZSB6T3NzX01lbWNtcChmX2J1Zl9wdHIsIHNfYnVmX3B0ciwgY291bnQpICAgIG1lbWNtcChmX2J1Zl9wdHIsIHNfYnVmX3B0ciwgY291bnQpDQorDQorI2Vsc2UNCisvKioNCisgKiBAYnJpZWYgtq/MrMnqx+vE2rTmuq/K/brqDQorICogQHBhcmFtIHNpemUgyOuyzqOsyerH68TatOa1xLTz0KENCisgKiBAcmV0dXJuILPJuaa3tbvYt9bF5LXExNq05ta41eujrMqnsNy3tbvYv9XWuNXrDQorICogQHJldHZhbCB2b2lkKsDg0M21xNa41esgICCzybmmDQorICogQHJldHZhbCBOVUxMICAgICAgICAgICAgICDKp7DcDQorICovDQorI2RlZmluZSB6T3NzX01hbGxvYyhzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV9tYWxsb2Moc2l6ZSwgWk9TU19GSUxFLCBaT1NTX0xJTkUpICAgIA0KKw0KKy8qKg0KKyAqIEBicmllZiC2r8ysxNq05rX31fu6r8r9uuoNCisgKiBAcGFyYW0gbWVtX3B0ciAgyOuyzqOs0qq199X7tcTE2rTm1rjV6w0KKyAqIEBwYXJhbSBuZXdfc2l6ZSDI67LOo6zSqrX31fu1xMTatOa089ChDQorICogQHJldHVybiCzybmmt7W72LX31fu687XExNq05ta41eujrMqnsNy3tbvYv9XWuNXrDQorICogQHJldHZhbCB2b2lkKsDg0M21xNa41esgICCzybmmDQorICogQHJldHZhbCBOVUxMICAgICAgICAgICAgICDKp7DcDQorICovDQorI2RlZmluZSB6T3NzX1JlYWxsb2MobWVtX3B0ciwgbmV3X3NpemUpICAgICAgICAgICAgIG1lbV9yZV9hbGxvYyhtZW1fcHRyLCBuZXdfc2l6ZSwgWk9TU19GSUxFLCBaT1NTX0xJTkUpDQorDQorLyoqDQorICogQGJyaWVmIMrNt8XE2rTmuq/K/brqDQorICogQHBhcmFtIG1lbV9wdHIgyOuyzqOs0qrKzbfFtcTE2rTm1rjV6w0KKyAqIEByZXR1cm4gdm9pZA0KKyAqLw0KKyNkZWZpbmUgek9zc19GcmVlKG1lbV9wdHIpICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fZnJlZV9leHRlbmQobWVtX3B0ciwgWk9TU19GSUxFLCBaT1NTX0xJTkUpIA0KKw0KKy8qKg0KKyAqIEBicmllZiDE2rTmv72xtLqvyv266g0KKyAqIEBwYXJhbSBkZXN0X3B0ciAgyOuyzqOsxL+x6sTatObWuNXrDQorICogQHBhcmFtIHNyY19wdHIgICDI67LOo6zUtMTatObWuNXrDQorICogQHBhcmFtIHNpemUgICAgICDI67LOo6zSqr+9sbS1xLTz0KENCisgKiBAcmV0dXJuILe1u9hkZXN0X3B0crXE1rjV6w0KKyAqLw0KKyNkZWZpbmUgek9zc19NZW1jcHkoZGVzdF9wdHIsIHNyY19wdHIsIHNpemUpICAgICAgICBtZW1fbWVtY3B5KGRlc3RfcHRyLCBzcmNfcHRyLCBzaXplLCBaT1NTX0ZJTEUsIFpPU1NfTElORSkNCisNCisvKioNCisgKiBAYnJpZWYgxNq05rP1yry7r7qvyv266g0KKyAqIEBwYXJhbSBkZXN0X3B0ciAgyOuyzqOs0qqz9cq8u6+1xMS/serE2rTm1rjV6w0KKyAqIEBwYXJhbSB2YWx1ZSAgICAgyOuyzqOss/XKvLuvtcTWtQ0KKyAqIEBwYXJhbSBzaXplICAgICAgyOuyzqOss/XKvLuvtcTE2rTmtPPQoQ0KKyAqIEByZXR1cm4gt7W72LG7s/XKvLuvxNq05rXE1rjV66Oodm9pZCqjqQ0KKyAqLw0KKyNkZWZpbmUgek9zc19NZW1zZXQoZGVzdF9wdHIsIHZhbHVlLCBzaXplKSAgICAgICAgICBtZW1fbWVtc2V0KGRlc3RfcHRyLCB2YWx1ZSwgc2l6ZSwgWk9TU19GSUxFLCBaT1NTX0xJTkUpDQorICAgIA0KKy8qKg0KKyAqIEBicmllZiDE2rTmsOHSxg0KKyAqIEBwYXJhbSBkZXN0X3B0ciAgyOuyzqOs0qqw4dLGtcTEv7HqxNq05ta41esNCisgKiBAcGFyYW0gc3JjX3B0ciAgIMjrss6jrLDh0sa1xNS0xNq05ta41esNCisgKiBAcGFyYW0gY291bnQgICAgIMjrss6jrLDh0sbE2rTmtPPQoQ0KKyAqIEByZXR1cm4gt7W72GRlc3RfcHRytcTWuNXrDQorICovDQorI2RlZmluZSB6T3NzX01lbW1vdmUoZGVzdF9wdHIsIHNyY19wdHIsIGNvdW50KSAgICAgIG1lbV9tZW1tb3ZlKGRlc3RfcHRyLCBzcmNfcHRyLCBjb3VudCkNCisNCisvKioNCisgKiBAYnJpZWYgxNq05rHIvc+6r8r9uuoNCisgKiBAcGFyYW0gZl9idWZfcHRyICDI67LOo6zSqrHIvc+1xNK7t73E2rTm1rjV6w0KKyAqIEBwYXJhbSBzX2J1Zl9wdHIgIMjrss6jrNKqsci9z7XEwe3Su7e9xNq05ta41esNCisgKiBAcGFyYW0gY291bnQgICAgICDI67LOo6zSqrHIvc+1xMTatOa089ChDQorICogQHJldHVybiDP4M2st7W72DCjrLfx1PKyu8/gzawNCisgKi8NCisjZGVmaW5lIHpPc3NfTWVtY21wKGZfYnVmX3B0ciwgc19idWZfcHRyLCBjb3VudCkgICAgbWVtX21lbWNtcChmX2J1Zl9wdHIsIHNfYnVmX3B0ciwgY291bnQpDQorDQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqDQorICogQGJyaWVmIFpPU1NfVElNRV9UtcTA4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVUlOVDMyICBaT1NTX1RJTUVfVDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioNCisgKiBAYnJpZWYgt7W72LTTuavUqjE5NzDE6jHUwjHI1bXEVVRDyrG85LTTMMqxMLfWMMPry+PG8LW9z9bU2sv5vq25/bXEw+vK/Q0KKyAqIEBwYXJhbSB0ICAgICAgILP2ss6jrLGjtOa007mr1KoxOTcwxOox1MIxyNW1xFVUQ8qxvOS00zDKsTC31jDD68vjxvC1vc/W1NrL+b6tuf21xA0KKyAgICAgICAgICAgICAgICAgICAgw+vK/aOsuMOyzsr9v8nOqk5VTEwNCisgKiBAcmV0dXJuILTTuavUqjE5NzDE6jHUwjHI1bXEVVRDyrG85LTTMMqxMLfWMMPry+PG8LW9z9bU2sv5vq25/bXEw+vK/Q0KKyAqIEBub3RlIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1pPU1NfVElNRV9UIHpPc3NfVGltZShaT1NTX1RJTUVfVCAqdCk7DQorDQorI2lmbmRlZiBET1hZR0VOX1NIT1VMRF9TS0lQX1RISVMNCisNCitWT0lEICp6T3NzX0NhY2hlTWFsbG9jKFVJTlQzMiBzaXplKTsNCisNCitWT0lEIHpPc3NfQ2FjaGVGcmVlKFZPSUQgKnB0cik7DQorDQorLyog1fvK/deqs8nX1rf7ICovDQorY2hhciAqaXRvYShpbnQgbnVtLCBjaGFyICpzdHIsIGludCByYWRpeCk7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAgICAgICAgICAgICAgICAgICAgICBJbmxpbmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmIGRlZmluZWQoX01FTV9VU0VfSEVBUCkNCisNCisjaWYgZGVmaW5lZCAoX09TX1RPUykNCitzdGF0aWMgaW5saW5lIFZPSUQgKm1lbV9tYWxsb2MoVUlOVDMyIHNpemUsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKQ0KK3sNCisgICAgcmV0dXJuIChWT0lEICopdG9zX2hlYXBfYWxsb2Moc2l6ZSwgZmlsZSwgbGluZSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgVk9JRCAqbWVtX3JlX2FsbG9jKFZPSUQgKm1lbV9wdHIsIFVJTlQzMiBuZXdfc2l6ZSwgY29uc3QgQ0hBUiAqZmlsZSwgVUlOVDMyIGxpbmUpDQorew0KKyAgICByZXR1cm4gKFZPSUQgKil0b3NfaGVhcF9yZWFsbG9jKG1lbV9wdHIsIG5ld19zaXplLCBmaWxlLCBsaW5lKTsNCit9DQorDQorc3RhdGljIGlubGluZSBWT0lEIG1lbV9mcmVlX2V4dGVuZChWT0lEICptZW1fcHRyLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSkNCit7DQorICAgIChWT0lEKXRvc19oZWFwX2ZyZWUobWVtX3B0ciwgZmlsZSwgbGluZSk7DQorfQ0KKyNlbGlmIGRlZmluZWQgKF9PU19MSU5VWCkNCitzdGF0aWMgaW5saW5lIFZPSUQgKm1lbV9tYWxsb2MoVUlOVDMyIHNpemUsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKQ0KK3sNCisgICAgcmV0dXJuIChWT0lEICopa21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsNCit9DQorDQorc3RhdGljIGlubGluZSBWT0lEICptZW1fcmVfYWxsb2MoVk9JRCAqbWVtX3B0ciwgVUlOVDMyIG5ld19zaXplLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSkNCit7DQorICAgIHJldHVybiAoVk9JRCAqKWtyZWFsbG9jKG1lbV9wdHIsIG5ld19zaXplLCBHRlBfS0VSTkVMKTsNCit9DQorDQorc3RhdGljIGlubGluZSBWT0lEIG1lbV9mcmVlX2V4dGVuZChWT0lEICptZW1fcHRyLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSkNCit7DQorICAgIChWT0lEKWtmcmVlKG1lbV9wdHIpOw0KK30NCisjZW5kaWYNCisNCitzdGF0aWMgaW5saW5lIFZPSUQgKm1lbV9tZW1jcHkoVk9JRCAqZGVzdF9wdHIsIGNvbnN0IFZPSUQgKnNyY19wdHIsIFVJTlQzMiBzaXplLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSkNCit7DQorICAgIHJldHVybiBtZW1jcHkoZGVzdF9wdHIsIHNyY19wdHIsIHNpemUpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIFZPSUQgKm1lbV9tZW1zZXQoVk9JRCAqZGVzdF9wdHIsIFNJTlQzMiB2YWx1ZSwgVUlOVDMyIHNpemUsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKQ0KK3sNCisgICAgcmV0dXJuIG1lbXNldChkZXN0X3B0ciwgdmFsdWUsIHNpemUpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIFZPSUQgKm1lbV9tZW1tb3ZlKFZPSUQgKmRlc3RfcHRyLCBjb25zdCBWT0lEICpzcmNfcHRyLCBVSU5UMzIgY291bnQpDQorew0KKyAgICByZXR1cm4gbWVtbW92ZShkZXN0X3B0ciwgc3JjX3B0ciwgY291bnQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIFNJTlQzMiBtZW1fbWVtY21wKGNvbnN0IFZPSUQgKmZfYnVmX3B0ciwgY29uc3QgVk9JRCAqc19idWZfcHRyLCBVSU5UMzIgY291bnQpDQorew0KKyAgICByZXR1cm4gbWVtY21wKGZfYnVmX3B0ciwgc19idWZfcHRyLCBjb3VudCk7DQorfQ0KKw0KKyNlbHNlDQorDQorVk9JRCAqbWVtX21hbGxvYyhVSU5UMzIgc2l6ZSwgY29uc3QgQ0hBUiAqZmlsZSwgVUlOVDMyIGxpbmUpOw0KK1ZPSUQgKm1lbV9yZV9hbGxvYyhWT0lEICptZW1fcHRyLCBVSU5UMzIgbmV3X3NpemUsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKTsNCitWT0lEIG1lbV9mcmVlX2V4dGVuZChWT0lEICptZW1fcHRyLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSk7DQorVk9JRCAqbWVtX21lbWNweShWT0lEICpkZXN0X3B0ciwgY29uc3QgVk9JRCAqc3JjX3B0ciwgVUlOVDMyIHNpemUsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKTsNCitWT0lEICptZW1fbWVtc2V0KFZPSUQgKmRlc3RfcHRyLCBTSU5UMzIgdmFsdWUsIFVJTlQzMiBzaXplLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSk7DQorVk9JRCAqbWVtX21lbW1vdmUoVk9JRCAqZGVzdF9wdHIsIGNvbnN0IFZPSUQgKnNyY19wdHIsIFVJTlQzMiBjb3VudCk7DQorU0lOVDMyIG1lbV9tZW1jbXAoY29uc3QgVk9JRCAqZl9idWZfcHRyLCBjb25zdCBWT0lEICpzX2J1Zl9wdHIsIFVJTlQzMiBjb3VudCk7DQorDQorI2VuZGlmDQorDQorI2VuZGlmLy8jaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLy8jaWZkZWYgX1VTRV9DTElCDQorDQorI2VuZGlmIC8vI2lmbmRlZiBfT1NTX0NMSUJfSA0KKw0KZGlmZiAtLWdpdCBhL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfY29tcGlsZXIuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfY29tcGlsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMjBkZmIxCi0tLSAvZGV2L251bGwKKysrIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19jb21waWxlci5oCkBAIC0wLDAgKzEsMTY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAxMiBaVEUgQ29ycG9yYXRpb24uDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogxKMgv+kgw/sgOiBQOThDX09TUw0KKyogzsQgvP4gw/sgOiBvc3NfY29tcGlsZXIuaA0KKyogz+C52M7EvP4gOiANCisqIMq1z9a5psTcIDog0+ux4NLrxve66s/gudi1xLrqtqjS5Q0KKyog1/cgICAg1d8gOiBjaGVueGluZ2ZhbmcNCisqILDmICAgILG+IDogVjEuMA0KKyogzeqzycjVxtogOiAyMDEyLTA4LTEwIA0KKyogxuTL/Mu1w/cgOiANCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqINDeuMS8x8K8DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmbmRlZiBfT1NTX0NPTVBJTEVSX0gNCisjZGVmaW5lIF9PU1NfQ09NUElMRVJfSA0KKw0KKyNkZWZpbmUgX1VTRV9DT01QSUxFUg0KKyNpZmRlZiBfVVNFX0NPTVBJTEVSDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAjaW5jbHVkZcf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9PU19UT1MNCisjIGluY2x1ZGUgInRvc19saW5rX2luZm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiDQorew0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogs6PBv7ao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZmRlZiBfT1NfTElOVVgNCisNCisjaWZkZWYgX1VTRV9UQ00NCisjIGRlZmluZSBfX3RjbV9mdW5jICAgICAgICAgIF9fdGNtZnVuYw0KKyMgZGVmaW5lIF9fdGNtX2NhbGxfZnVuYyAgICAgX19hdHRyaWJ1dGVfXygobG9uZ19jYWxsKSkNCisjIGRlZmluZSBfX3RjbV9sb2NhbF9mdW5jICAgIF9fdGNtbG9jYWxmdW5jDQorIyBkZWZpbmUgX190Y21fZGF0YSAgICAgICAgICBfX3RjbWRhdGENCisjIGRlZmluZSBfX3RjbV9jb25zdCAgICAgICAgIF9fdGNtY29uc3QNCisjIGRlZmluZSBfX2dwcm9mICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ncHJvZiIpLCBpbnN0cnVtZW50X2Z1bmN0aW9ucykpDQorI2Vsc2UNCisjIGRlZmluZSBfX3RjbV9mdW5jDQorIyBkZWZpbmUgX190Y21fY2FsbF9mdW5jDQorIyBkZWZpbmUgX190Y21fbG9jYWxfZnVuYw0KKyMgZGVmaW5lIF9fdGNtX2RhdGENCisjIGRlZmluZSBfX3RjbV9jb25zdA0KKyMgZGVmaW5lIF9fZ3Byb2YNCisjZW5kaWYNCisjaWZkZWYgQ09ORklHX01PREVNX0NPREVfSVNfTUFQUElORw0KKyMgZGVmaW5lIF9fcHNfc3RhdGljX2Z1bmMgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucHNfc3RhdGljX2Z1bmMiKSwgbG9uZ19jYWxsKSkgbm9pbmxpbmUNCisjIGRlZmluZSBfX3BzXzRnX2Z1bmMgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnBzXzRnX2Z1bmMiKSwgbG9uZ19jYWxsKSkgbm9pbmxpbmUNCisjIGRlZmluZSBfX3BzXzNnX2Z1bmMgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnBzXzNnX2Z1bmMiKSwgbG9uZ19jYWxsKSkgbm9pbmxpbmUNCisjIGRlZmluZSBfX3BzXzJnX2Z1bmMgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnBzXzJnX2Z1bmMiKSwgbG9uZ19jYWxsKSkgbm9pbmxpbmUNCisjIGRlZmluZSBfX3BzX2NvbW1fZnVuYyAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucHNfY29tbV9mdW5jIiksIGxvbmdfY2FsbCkpIG5vaW5saW5lDQorI2Vsc2UNCisjIGRlZmluZSBfX3BzX3N0YXRpY19mdW5jICAgICAgICAgDQorIyBkZWZpbmUgX19wc180Z19mdW5jICAgICAgICAgICAgIA0KKyMgZGVmaW5lIF9fcHNfM2dfZnVuYyAgICAgICAgICAgICANCisjIGRlZmluZSBfX3BzXzJnX2Z1bmMgICAgICAgICAgICAgDQorIyBkZWZpbmUgX19wc19jb21tX2Z1bmMgICAgICAgICAgIA0KKyNlbmRpZg0KKyNlbHNlICAgLy8gI2lmZGVmIF9PU19MSU5VWA0KKw0KKyNpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID09IDMpICYmIChfX0dOVUNfUEFUQ0hMRVZFTF9fID09IDIpDQorIyBkZWZpbmUgYmFycmllcigpICBhc20gdm9sYXRpbGUoICIiIDogOiA6ICJtZW1vcnkiICkNCisjZWxzZQ0KKyMgZGVmaW5lIGJhcnJpZXIoKQ0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkIChfVVNFX1RDTSkNCisjIGRlZmluZSBfX3RjbV9mdW5jICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLml0Y20iKSwgbG9uZ19jYWxsKSkgbm9pbmxpbmUNCisjIGRlZmluZSBfX3RjbV9jYWxsX2Z1bmMgICAgX19hdHRyaWJ1dGVfXygobG9uZ19jYWxsKSkNCisjIGRlZmluZSBfX3RjbV9kYXRhICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmR0Y20iKSkpDQorIyBkZWZpbmUgX19ncHJvZiAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ncHJvZiIpLCBpbnN0cnVtZW50X2Z1bmN0aW9ucykpDQorI2VsaWYgZGVmaW5lZCAoX19BUk1DQ19WRVJTSU9OKSAmJiBkZWZpbmVkIChfVVNFX1RDTSkNCisjIGRlZmluZSBfX3RjbV9mdW5jICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLml0Y20iKSkpDQorIyBkZWZpbmUgX190Y21fY2FsbF9mdW5jICAgIA0KKyMgZGVmaW5lIF9fdGNtX2RhdGEgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZHRjbSIpKSkNCisjIGRlZmluZSBfX2dwcm9mIA0KKyNlbHNlDQorIyBkZWZpbmUgX190Y21fZnVuYw0KKyMgZGVmaW5lIF9fdGNtX2NhbGxfZnVuYw0KKyMgZGVmaW5lIF9fdGNtX2RhdGENCisjIGRlZmluZSBfX2dwcm9mDQorI2VuZGlmDQorDQorI2lmZGVmIF9fR05VQ19fDQorIyBkZWZpbmUgaW5saW5lICAgICAgICAgX19pbmxpbmVfXw0KKyMgZGVmaW5lIGFsd2F5c19pbmxpbmUgIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQorIyBkZWZpbmUgbm9pbmxpbmUgICAgICAgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQ0KKyNlbGlmIGRlZmluZWQgKF9fQVJNQ0NfVkVSU0lPTikNCisjIGRlZmluZSBpbmxpbmUgICAgICAgICBfX2lubGluZQ0KKyMgZGVmaW5lIGFsd2F5c19pbmxpbmUgIF9fZm9yY2VpbmxpbmUNCisjIGRlZmluZSBub2lubGluZQ0KKyNlbGlmIGRlZmluZWQgKF9NU0NfVkVSKQ0KKyMgZGVmaW5lIGlubGluZSAgICAgICAgIGlubGluZQ0KKyMgZGVmaW5lIGFsd2F5c19pbmxpbmUgIGlubGluZQ0KKyMgZGVmaW5lIG5vaW5saW5lDQorI2Vsc2UNCisjIGRlZmluZSBpbmxpbmUNCisjIGRlZmluZSBhbHdheXNfaW5saW5lDQorIyBkZWZpbmUgbm9pbmxpbmUNCisjZW5kaWYNCisNCisjZW5kaWYgIC8vICNpZmRlZiBfT1NfTElOVVgNCisNCisjaWZkZWYgX19HTlVDX18NCisvLyNwcmFnbWEgR0NDIG9wdGltaXplKCItTzAiKQ0KKy8vI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIi1PMiIpDQorIyBkZWZpbmUgX19vcHRpbWl6ZSh4KSAgX19hdHRyaWJ1dGVfXygob3B0aW1pemUoX19zdHIoeCkpKSkNCisjZWxzZQ0KKyMgZGVmaW5lIF9fb3B0aW1pemUoeCkNCisjZW5kaWYNCisNCisjaWZkZWYgX19BUk1DQ19WRVJTSU9ODQorIyBkZWZpbmUgUFJBR01BKFgpICAgICAgICAgIF9QcmFnbWEoI1gpDQorIyBkZWZpbmUgUk9EQVRBX0JFR0lOKFgpICAgIFBSQUdNQShhcm0gc2VjdGlvbiByb2RhdGE9I1gpICAgDQorIyBkZWZpbmUgUldEQVRBX0JFR0lOKFgpICAgIFBSQUdNQShhcm0gc2VjdGlvbiByd2RhdGE9I1gpICAgDQorIyBkZWZpbmUgWklEQVRBX0JFR0lOKFgpICAgIFBSQUdNQShhcm0gc2VjdGlvbiB6aWRhdGE9I1gpICANCisjIGRlZmluZSBDT0RFX0JFR0lOKFgpICAgICAgUFJBR01BKGFybSBzZWN0aW9uIGNvZGU9I1gpICAgDQorDQorIyBkZWZpbmUgUk9EQVRBX0VORCAgICAgICAgIF9QcmFnbWEoImFybSBzZWN0aW9uIHJvZGF0YSIpDQorIyBkZWZpbmUgUldEQVRBX0VORCAgICAgICAgIF9QcmFnbWEoImFybSBzZWN0aW9uIHJ3ZGF0YSIpDQorIyBkZWZpbmUgWklEQVRBX0VORCAgICAgICAgIF9QcmFnbWEoImFybSBzZWN0aW9uIHppZGF0YSIpDQorIyBkZWZpbmUgQ09ERV9FTkQgICAgICAgICAgIF9QcmFnbWEoImFybSBzZWN0aW9uIGNvZGUiKQ0KKyNlbHNlDQorIyBkZWZpbmUgUFJBR01BKFgpDQorIyBkZWZpbmUgUk9EQVRBX0JFR0lOKFgpDQorIyBkZWZpbmUgUldEQVRBX0JFR0lOKFgpDQorIyBkZWZpbmUgWklEQVRBX0JFR0lOKFgpDQorIyBkZWZpbmUgQ09ERV9CRUdJTihYKQ0KKw0KKyMgZGVmaW5lIFJPREFUQV9FTkQNCisjIGRlZmluZSBSV0RBVEFfRU5EDQorIyBkZWZpbmUgWklEQVRBX0VORA0KKyMgZGVmaW5lIENPREVfRU5EDQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDK/b7dveG5ubao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cn5w/fH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyKu+1rHkwb/J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBfVVNFX0NPTVBJTEVSICAgICovDQorDQorI2VuZGlmICAvKiBfT1NTX0NPTVBJTEVSX0ggICovDQorDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19mcy5oIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDdlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX2ZzLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEyIFpURSBDb3Jwb3JhdGlvbi4NCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDEoyC/6SDD+yA6IFA5OENfT1NTDQorKiDOxCC8/iDD+yA6IG9zc19mcy5oDQorKiDP4LnYzsS8/iA6IA0KKyogyrXP1rmmxNwgOiDOxLz+z7XNsw0KKyog1/cgICAg1d8gOiBjaGVueGluZ2ZhbmcNCisqILDmICAgILG+IDogVjEuMA0KKyogzeqzycjVxtogOiAyMDEyLTA4LTEwDQorKiDG5Mv8y7XD9yA6IA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyog0N64xLzHwrwNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZuZGVmIF9PU1NfRlNfSA0KKyNkZWZpbmUgX09TU19GU19IDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAjaW5jbHVkZcf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIg0KK3sNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILOjwb+2qNLlx/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiC2wdC0zrvWwyAqLw0KKyNkZWZpbmUgWk9TU19TRUVLX1NFVCAgICAgICAgICAgICAgIDB4MCAgICAgICAgICAgLyogc2V0IHRvIG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19TRUVLX0NVUiAgICAgICAgICAgICAgIDB4MSAgICAgICAgICAgLyogc2V0IHRvIGN1cnJlbnQgcG9zaXRpb24gcGx1cyBvZmZzZXQgICAgICAqLw0KKyNkZWZpbmUgWk9TU19TRUVLX0VORCAgICAgICAgICAgICAgIDB4MiAgICAgICAgICAgLyogc2V0IHRvIHRoZSBzaXplIG9mIHRoZSBmaWxlIHBsdXMgb2Zmc2V0ICAqLw0KKw0KKy8qIMXk1sOyzsr9ICovDQorI2RlZmluZSBaT1NTX01BWF9GSUxFTkFNRV9MRU4gICAgICAgMjU1ICAgICAgICAgLyogzsS8/qGixL/CvMP71+6087OktsgsILD8uqzCt762ICAgKi8NCisNCisvKiDOxLz+oaLEv8K8yvTQ1KOssMu9+NbGse3KviAqLw0KKyNkZWZpbmUgWk9TU19BVFRSX0lGRElSICAgICAgICAgICAgIDA0MDAwMCAgICAgIC8qIMS/wrzOuyAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgDQorI2RlZmluZSBaT1NTX0FUVFJfUkRfVVNSICAgICAgICAgICAgMDQwMCAgICAgICAgLyogdXNlcrbBICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19BVFRSX1dSX1VTUiAgICAgICAgICAgIDAyMDAgICAgICAgIC8qIHVzZXLQtCAgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfQVRUUl9FWF9VU1IgICAgICAgICAgICAwMTAwICAgICAgICAvKiB1c2Vy1rTQ0CAgICAgICAgICAgICAgICAgICAgICovDQorICAgIA0KKyNkZWZpbmUgWk9TU19BVFRSX1JEX0dSUCAgICAgICAgICAgIDAwNDAgICAgICAgIC8qIGdyb3VwtsEgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfQVRUUl9XUl9HUlAgICAgICAgICAgICAwMDIwICAgICAgICAvKiBncm91cNC0ICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBaT1NTX0FUVFJfRVhfR1JQICAgICAgICAgICAgMDAxMCAgICAgICAgLyogZ3JvdXDWtNDQICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICANCisjZGVmaW5lIFpPU1NfQVRUUl9SRF9PVEggICAgICAgICAgICAwMDA0ICAgICAgICAvKiBvdGhlcrbBICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBaT1NTX0FUVFJfV1JfT1RIICAgICAgICAgICAgMDAwMiAgICAgICAgLyogb3RoZXLQtCAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19BVFRSX0VYX09USCAgICAgICAgICAgIDAwMDEgICAgICAgIC8qIG90aGVy1rTQ0CAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgDQorI2RlZmluZSBaT1NTX0FUVFJfUldYX1VTUiAgICAgICAgICAgMDcwMCAgICAgICAgLyogdXNlcrXEtsHQtNa00NAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19BVFRSX1JXWF9HUlAgICAgICAgICAgIDAwNzAgICAgICAgIC8qIGdyb3VwtcS2wdC01rTQ0CAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfQVRUUl9SV1hfT1RIICAgICAgICAgICAwMDA3ICAgICAgICAvKiBvdGhlcrXEtsHQtNa00NAgICAgICAgICAgICAgICovDQorICAgIA0KKyNkZWZpbmUgWk9TU19BVFRSX1JEX0FMTCAgICAgICAgICAgIDA0NDQgICAgICAgIC8qIHVzZXIsZ3JvdXAsb3RoZXK1xLbBICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfQVRUUl9XUl9BTEwgICAgICAgICAgICAwMjIyICAgICAgICAvKiB1c2VyLGdyb3VwLG90aGVytcTQtCAgICAgICAgICovDQorI2RlZmluZSBaT1NTX0FUVFJfRVhfQUxMICAgICAgICAgICAgMDExMSAgICAgICAgLyogdXNlcqOsZ3JvdXAsb3RoZXK1xNa00NAgICAgICAqLw0KKyAgICANCisjZGVmaW5lIFpPU1NfQVRUUl9SV1hfQUxMICAgICAgICAgICAwNzc3ICAgICAgICAvKiB1c2Vyo6xncm91cCxvdGhlcrXEtsHQtNa00NAgICovDQorDQorI2lmZGVmIF9PU19MSU5VWA0KKyMgZGVmaW5lIEZJTEUgICBpbnQNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMr9vt294bm5tqjS5cf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordHlwZWRlZiBzdHJ1Y3QgIA0KK3sNCisjaWYgZGVmaW5lZChfT1NfVE9TKSAmJiBkZWZpbmVkKENZR1BLR19GSUxFSU9fRElSRU5UX0RUWVBFKQ0KKyAgICBtb2RlX3QgIGRfdHlwZTsNCisjZW5kaWYNCisNCisgICAgQ0hBUiAgICBkX25hbWVbWk9TU19NQVhfRklMRU5BTUVfTEVOICsgMV07DQorfVpPU1NfU19ESVJFTlQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgIA0KK3sNCisgICAgVUlOVDMyICBzdF9kZXY7ICAgICAvKiBEZXZpY2UgSUQgbnVtYmVyICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgc3RfaW5vOyAgICAgLyogRmlsZSBzZXJpYWwgbnVtYmVyICAgICAgICAgICAqLw0KKyAgICBtb2RlX3QgIHN0X21vZGU7ICAgIC8qIE1vZGUgb2YgZmlsZSAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDE2ICBzdF9ubGluazsgICAvKiBOdW1iZXIgb2YgaGFyZCBsaW5rcyB0byBmaWxlICovDQorICAgIFVJTlQzMiAgc3RfdWlkOyAgICAgLyogVXNlciBJRCBvZiBmaWxlICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgIHN0X2dpZDsgICAgIC8qIEdyb3VwIElEIG9mIGZpbGUgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICBzdF9yZGV2OyAgICAvKiBEZXZpY2UgSUQgaWYgc3BlY2lhbCBmaWxlICAgICovDQorICAgIFVJTlQzMiAgc3Rfc2l6ZTsgICAgLyogRmlsZSBzaXplIGluIGJ5dGVzICAgICAgICAgICAqLw0KKyAgICB0aW1lX3QgIHN0X2F0aW1lOyAgIC8qIFRpbWUgb2YgbGFzdCBhY2Nlc3MgICAgICAgICAgKi8NCisgICAgdGltZV90ICBzdF9tdGltZTsgICAvKiBUaW1lIG9mIGxhc3QgbW9kaWZpY2F0aW9uICAgICovDQorICAgIHRpbWVfdCAgc3RfY3RpbWU7ICAgLyogVGltZSBvZiBsYXN0IHN0YXR1cyBjaGFuZ2UgICAqLw0KK31aT1NTX1NfU1RBVDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitVSU5UMzIgIHpPc3NfRkNyZWF0ZShjb25zdCBDSEFSICpmaWxlbmFtZSk7DQorRklMRSAgICp6T3NzX0ZPcGVuKGNvbnN0IENIQVIgKmZpbGVuYW1lLCBjb25zdCBDSEFSICptb2RlKTsNCitVSU5UMzIgIHpPc3NfRlNlZWsoRklMRSAqc3RyZWFtLCBTSU5UMzIgb2Zmc2V0LCBTSU5UMzIgd2hlbmNlKTsNCitTU0laRV9UIHpPc3NfRlJlYWQoVk9JRCAqZGF0YSwgU1NJWkVfVCBzaXplLCBTU0laRV9UIGNvdW50LCBGSUxFICpzdHJlYW0pOw0KK1NTSVpFX1Qgek9zc19GV3JpdGUoY29uc3QgVk9JRCAqZGF0YSwgU1NJWkVfVCBzaXplLCBTU0laRV9UIGNvdW50LCBGSUxFICpzdHJlYW0pOw0KK1VJTlQzMiAgek9zc19GRW9mKEZJTEUgKnN0cmVhbSk7DQorVUlOVDMyICB6T3NzX0ZFcnJvcihGSUxFICpzdHJlYW0pOw0KK1VJTlQzMiAgek9zc19GVHJ1bmNhdGUoRklMRSAqc3RyZWFtLCBVSU5UMzIgc2l6ZSk7DQorVUlOVDMyICB6T3NzX0ZGbHVzaChGSUxFICpzdHJlYW0pOw0KK1VJTlQzMiAgek9zc19GVGVsbChGSUxFICpzdHJlYW0pOw0KK1VJTlQzMiAgek9zc19GQ2xvc2UoRklMRSAqc3RyZWFtKTsNCitVSU5UMzIgIHpPc3NfRlJlbmFtZShjb25zdCBDSEFSICpvbGRfZmlsZW5hbWUsIGNvbnN0IENIQVIgKm5ld19maWxlbmFtZSk7DQorVUlOVDMyICB6T3NzX0ZEZWxldGUoY29uc3QgQ0hBUiAqZmlsZW5hbWUpOw0KK1VJTlQzMiAgek9zc19GTGVuZ3RoKEZJTEUgKnN0cmVhbSk7DQorQk9PTCAgICB6T3NzX0ZFeGlzdChjb25zdCBDSEFSICpmaWxlbmFtZSk7DQorVUlOVDMyICB6T3NzX01rZGlyKGNvbnN0IENIQVIgKmRpcm5hbWUpOw0KK1VJTlQzMiAgek9zc19SbWRpcihjb25zdCBDSEFSICpkaXJuYW1lKTsNCitVSU5UMzIgIHpPc3NfUm5kaXIoY29uc3QgQ0hBUiAqb2xkX2Rpcm5hbWUsIGNvbnN0IENIQVIgKm5ld19kaXJuYW1lKTsNCitVSU5UMzIgIHpPc3NfR2V0UHdkKENIQVIgKmRpcm5hbWUsIFVJTlQzMiBkaXJuYW1lbGVuKTsNCitVSU5UMzIgIHpPc3NfQ2hEaXIoQ0hBUiAqZGlybmFtZSk7DQorQk9PTCAgICB6T3NzX0lzRGlyKGNvbnN0IENIQVIgKmRpcm5hbWUpOw0KK1VJTlQzMiAgek9zc19PcGVuRGlyKGNvbnN0IENIQVIgKmRpcm5hbWUsIFZPSUQgKipkaXJfZW50cnlfcHRyKTsNCitVSU5UMzIgIHpPc3NfQ2xvc2VEaXIoVk9JRCAqKmRpcl9lbnRyeV9wdHIpOw0KK1VJTlQzMiAgek9zc19SZWFkRGlyKFZPSUQgKipkaXJfZW50cnlfcHRyLCBaT1NTX1NfRElSRU5UICpkaXJfaXRlbV9wdHIpOw0KK1ZPSUQgICAgek9zc19SZXdpbmRkaXIoVk9JRCAqZGlyX2VudHJ5X3B0cik7DQorVUlOVDMyICB6T3NzX0NoTW9kKGNvbnN0IENIQVIgKnBhdGhuYW1lLCBtb2RlX3QgYXR0cnMpOw0KK1VJTlQzMiAgek9zc19TdGF0KGNvbnN0IENIQVIgKnBhdGhuYW1lLCBaT1NTX1NfU1RBVCAqYnVmKTsNCitVSU5UMzIgIHpPc3NfTW91bnREaXNrKENIQVIgZGlza25hbWUpOw0KK1VJTlQzMiAgek9zc19Vbk1vdW50RGlzayhDSEFSIGRpc2tuYW1lKTsNCitVSU5UMzIgIHpPc3NfVW5Nb3VudEFsbERpc2soVk9JRCk7DQorVUlOVDMyICB6T3NzX0dldERpc2tGcmVlU3BhY2UoQ0hBUiBkaXNrbmFtZSwgVUlOVDY0ICpzcGFjZSk7DQorVUlOVDMyICB6T3NzX0dldERpc2tDYXBhY2l0eShDSEFSIGRpc2tuYW1lLCBVSU5UNjQgKnNwYWNlKTsNCitVSU5UMzIgIHpPc3NfR2V0QWxsRHluYW1pY0Rpc2soQ0hBUiAqZGlzaywgVUlOVDMyIHNpemUpOw0KK1VJTlQzMiAgek9zc19TeW5jRlMoVk9JRCk7DQorVUlOVDMyICB6T3NzX01vdW50RHluYW1pY0Rpc2soQ0hBUiAqcFdpbkRpciwgQ0hBUiAqcExpbnV4RGlyLCBDSEFSICpwRGV2TmFtZSwgY2hhciAqcEZzTmFtZSk7DQorVUlOVDMyICB6T3NzX1VuTW91bnREeW5hbWljRGlzayhDSEFSICpwV2luRGlyKTsNCitVSU5UMzIgIHpPc3NfRnNNb3VudChWT0lEKTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMirvtax5MG/yfnD98f4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAgLyogX09TU19GU19IICAgICovDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19pcnEuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxNGQzOQotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfaXJxLmgKQEAgLTAsMCArMSwyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEyIFpURSBDb3Jwb3JhdGlvbi4NCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDEoyC/6SDD+yA6IFA5OENfT1NTDQorKiDOxCC8/iDD+yA6IG9zc19pcnEuaA0KKyogz+C52M7EvP4gOiANCisqIMq1z9a5psTcIDog1tC2z8frx/PEo7/pDQorKiDX9yAgICDV3yA6IGNoZW54aW5nZmFuZw0KKyogsOYgICAgsb4gOiBWMS4wDQorKiDN6rPJyNXG2iA6IDIwMTItMDgtMTANCisqIMbky/zLtcP3IDogDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDQ3rjEvMfCvA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZm5kZWYgX09TU19JUlFfSA0KKyNkZWZpbmUgX09TU19JUlFfSA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogI2luY2x1ZGXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZmRlZiBfT1NfTElOVVgNCisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4NCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiDQorew0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogs6PBv7ao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZmRlZiBfT1NfVE9TDQorZXh0ZXJuIGxvbmcgdG9zX2lycV9sZXZlbDsNCitleHRlcm4gbG9uZyB0b3NfaXNyX2xldmVsOw0KK2V4dGVybiBsb25nIHRvc19kc3JfbGV2ZWw7DQorI2VuZGlmDQorDQorI2lmIGRlZmluZWQgX09TX1RPUyAgICANCisjZGVmaW5lIFRPU19TVEFUSVNUSUNfSVJRDQorICAgIA0KKyNkZWZpbmUgVE9TX1RSQUNFX0lSUQ0KKyAgICANCisjZGVmaW5lIFRPU19ESVNBQkxFX0lSUSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBDWUdfSU5URVJSVVBUX1NUQVRFIG9sZF9pbnRyOyAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBIQUxfRElTQUJMRV9JTlRFUlJVUFRTKG9sZF9pbnRyKTsNCisgICAgDQorI2RlZmluZSBUT1NfRU5BQkxFX0lSUSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgSEFMX1JFU1RPUkVfSU5URVJSVVBUUyhvbGRfaW50cik7ICAgICAgICAgICBcDQorICAgICAgICB9DQorICAgIA0KKy8qIFRPUyAzLjCy2df3z7XNs7XEyKXKucTcoaLKucTcoaKxo7TmoaK71ri01tC2z7e9sLggKi8NCisjZGVmaW5lIFRPU19ESVNBQkxFX0lSUV9GQVNUKCkgICAgICBIQUxfRElTQUJMRV9JTlRFUlJVUFRTKG9sZF9pbnRyKQ0KKyNkZWZpbmUgVE9TX0VOQUJMRV9JUlFfRkFTVCgpICAgICAgIEhBTF9SRVNUT1JFX0lOVEVSUlVQVFMob2xkX2ludHIpDQorI2RlZmluZSBUT1NfU0FWRV9JUlEob2xkX2ludHIpICAgICAgSEFMX0RJU0FCTEVfSU5URVJSVVBUUyhvbGRfaW50cikNCisjZGVmaW5lIFRPU19SRVNUT1JFX0lSUShvbGRfaW50cikgICBIQUxfUkVTVE9SRV9JTlRFUlJVUFRTKG9sZF9pbnRyKQ0KKyNkZWZpbmUgVE9TX1FVRVJZX0lSUShvbGRfaW50cikgICAgIEhBTF9RVUVSWV9JTlRFUlJVUFRTKG9sZF9pbnRyKQ0KKyAgICANCisvKiDWp7PFtcTIpcq5xNyhosq5xNyhorGjtOahorvWuLTW0LbPt72wuKOs0OjSqtXrttSyu82stcSy2df3z7XNs8a9zKi9+NDQ0sbWsiAqLw0KKyNkZWZpbmUgWk9TU19JTlRSICAgICAgICAgICAgICAgICAgIENZR19JTlRFUlJVUFRfU1RBVEUNCisjZGVmaW5lIFpPU1NfRElTQUJMRV9JUlEoKSAgICAgICAgICBUT1NfRElTQUJMRV9JUlEoKQ0KKyNkZWZpbmUgWk9TU19FTkFCTEVfSVJRKCkgICAgICAgICAgIFRPU19FTkFCTEVfSVJRKCkNCisjZGVmaW5lIFpPU1NfRElTQUJMRV9JUlFfRkFTVCgpICAgICBUT1NfRElTQUJMRV9JUlFfRkFTVCgpDQorI2RlZmluZSBaT1NTX0VOQUJMRV9JUlFfRkFTVCgpICAgICAgVE9TX0VOQUJMRV9JUlFfRkFTVCgpDQorI2RlZmluZSBaT1NTX1NBVkVfSVJRKG9sZF9pbnRyKSAgICAgVE9TX1NBVkVfSVJRKG9sZF9pbnRyKQ0KKyNkZWZpbmUgWk9TU19SRVNUT1JFX0lSUShvbGRfaW50cikgIFRPU19SRVNUT1JFX0lSUShvbGRfaW50cikNCisjZGVmaW5lIFpPU1NfUVVFUllfSVJRKG9sZF9pbnRyKSAgICBUT1NfUVVFUllfSVJRKG9sZF9pbnRyKQ0KKyAgICANCisvKiDKysXk1K3T0LT6wuvW0LXEyKXKucTcoaLKucTcoaKxo7TmoaK71ri01tC2z7e9sLggKi8NCisjZGVmaW5lIExPQ0tfU0FWRShvbGRfaW50cikgICAgICAgICBaT1NTX1NBVkVfSVJRKG9sZF9pbnRyKQ0KKyNkZWZpbmUgTE9DS19SRVNUT1JFKG9sZF9pbnRyKSAgICAgIFpPU1NfUkVTVE9SRV9JUlEob2xkX2ludHIpDQorI2VsaWYgZGVmaW5lZCBfT1NfT1NFDQorI2RlZmluZSBaT1NTX0lOVFIgICB1bnNpZ25lZCBsb25nDQorICAgIA0KKyNkZWZpbmUgWk9TU19ESVNBQkxFX0lSUSgpICAgICAgICAgICAgICBcDQorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1zcjsgICAgICAgICAgXA0KKyAgICAgICAgICAgIExPQ0tfU0FWRShtc3IpOw0KKyAgICAgDQorI2RlZmluZSBaT1NTX0VOQUJMRV9JUlEoKSAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBMT0NLX1JFU1RPUkUobXNyKTsgICAgICAgICAgXA0KKyAgICAgICAgfSAgICAgIA0KKyAgICANCisjZGVmaW5lIFpPU1NfRElTQUJMRV9JUlFfRkFTVCgpICAgICBMT0NLX1NBVkUob2xkX2ludHIpDQorI2RlZmluZSBaT1NTX0VOQUJMRV9JUlFfRkFTVCgpICAgICAgTE9DS19SRVNUT1JFKG9sZF9pbnRyKQ0KKyAgICANCisjZGVmaW5lIFpPU1NfU0FWRV9JUlEob2xkX2ludHIpICAgICBMT0NLX1NBVkUob2xkX2ludHIpDQorI2RlZmluZSBaT1NTX1JFU1RPUkVfSVJRKG9sZF9pbnRyKSAgTE9DS19SRVNUT1JFKG9sZF9pbnRyKQ0KKyNlbGlmIGRlZmluZWQgX09TX0xJTlVYDQorI2RlZmluZSBMSU5VWF9TVEFUSVNUSUNfSVJRDQorI2RlZmluZSBMSU5VWF9UUkFDRV9JUlENCisjZGVmaW5lIExJTlVYX0RJU0FCTEVfSVJRKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7DQorICAgIA0KKyNkZWZpbmUgTElOVVhfRU5BQkxFX0lSUSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgfQ0KKw0KKy8qIExJTlVYILLZ1/fPtc2ztcTIpcq5xNyhosq5xNyhorGjtOahorvWuLTW0LbPt72wuCAqLw0KKyNkZWZpbmUgTElOVVhfRElTQUJMRV9JUlFfRkFTVCgpICAgIGxvY2FsX2lycV9zYXZlKG9sZF9pbnRyKQ0KKyNkZWZpbmUgTElOVVhfRU5BQkxFX0lSUV9GQVNUKCkgICAgIGxvY2FsX2lycV9yZXN0b3JlKG9sZF9pbnRyKQ0KKyNkZWZpbmUgTElOVVhfU0FWRV9JUlEob2xkX2ludHIpICAgIGxvY2FsX2lycV9zYXZlKG9sZF9pbnRyKQ0KKyNkZWZpbmUgTElOVVhfUkVTVE9SRV9JUlEob2xkX2ludHIpIGxvY2FsX2lycV9yZXN0b3JlKG9sZF9pbnRyKQ0KKyNkZWZpbmUgTElOVVhfUVVFUllfSVJRKG9sZF9pbnRyKSAgIGxvY2FsX3NhdmVfZmxhZ3Mob2xkX2ludHIpDQorDQorLyog1qezxbXEyKXKucTcoaLKucTcoaKxo7TmoaK71ri01tC2z7e9sLijrNDo0qrV67bUsrvNrLXEstnX98+1zbPGvcyovfjQ0NLG1rIgKi8NCisjZGVmaW5lIFpPU1NfSU5UUiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nDQorI2RlZmluZSBaT1NTX0RJU0FCTEVfSVJRKCkgICAgICAgICAgTElOVVhfRElTQUJMRV9JUlEoKQ0KKyNkZWZpbmUgWk9TU19FTkFCTEVfSVJRKCkgICAgICAgICAgIExJTlVYX0VOQUJMRV9JUlEoKQ0KKyNkZWZpbmUgWk9TU19ESVNBQkxFX0lSUV9GQVNUKCkgICAgIExJTlVYX0RJU0FCTEVfSVJRX0ZBU1QoKQ0KKyNkZWZpbmUgWk9TU19FTkFCTEVfSVJRX0ZBU1QoKSAgICAgIExJTlVYX0VOQUJMRV9JUlFfRkFTVCgpDQorI2RlZmluZSBaT1NTX1NBVkVfSVJRKG9sZF9pbnRyKSAgICAgTElOVVhfU0FWRV9JUlEob2xkX2ludHIpDQorI2RlZmluZSBaT1NTX1JFU1RPUkVfSVJRKG9sZF9pbnRyKSAgTElOVVhfUkVTVE9SRV9JUlEob2xkX2ludHIpDQorI2RlZmluZSBaT1NTX1FVRVJZX0lSUShvbGRfaW50cikgICAgTElOVVhfUVVFUllfSVJRKG9sZF9pbnRyKQ0KKyAgICANCisvKiDKysXk1K3T0LT6wuvW0LXEyKXKucTcoaLKucTcoaKxo7TmoaK71ri01tC2z7e9sLggKi8NCisjZGVmaW5lIExPQ0tfU0FWRShvbGRfaW50cikgICAgICAgICBaT1NTX1NBVkVfSVJRKG9sZF9pbnRyKQ0KKyNkZWZpbmUgTE9DS19SRVNUT1JFKG9sZF9pbnRyKSAgICAgIFpPU1NfUkVTVE9SRV9JUlEob2xkX2ludHIpDQorI2VuZGlmDQorDQorI2RlZmluZSB6RHJ2X0Rpc2FibGVJcnEoKSAgICAgICAgICAgWk9TU19ESVNBQkxFX0lSUSgpDQorI2RlZmluZSB6RHJ2X0VuYWJsZUlycSgpICAgICAgICAgICAgWk9TU19FTkFCTEVfSVJRKCkNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMr9vt294bm5tqjS5cf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9PU19UT1MNCit0eXBlZGVmIFVJTlQzMiB0b3NfaXNyX3QoVUlOVDMyIHZlY3RvciwgVUlOVDMyIGRhdGEpOw0KK3R5cGVkZWYgVk9JRCB0b3NfZHNyX3QoVUlOVDMyIHZlY3RvciwgVUlOVDMyIGNvdW50LCBVSU5UMzIgZGF0YSk7DQorI2VsaWYgZGVmaW5lZCBfT1NfTElOVVgNCit0eXBlZGVmIFVJTlQzMiBsaW51eF9pc3JfdChVSU5UMzIgdmVjdG9yLCBVSU5UMzIgZGF0YSk7DQordHlwZWRlZiBWT0lEIGxpbnV4X2Rzcl90KFVJTlQzMiB2ZWN0b3IsIFVJTlQzMiBjb3VudCwgVUlOVDMyIGRhdGEpOw0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cn5w/fH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZmRlZiBfT1NfVE9TDQorVUlOVDMyIHRvc19kZWZhdWx0X2lzciggVUlOVDMyIHZlY3RvciwgVUlOVDMyIGRhdGEpOw0KKyNpZmRlZiBfVVNFX09TU19NSU4NCitVSU5UMzIgdG9zX2NyZWF0ZV9pcnEoVUlOVDMyIHZlY3RvciwgVUlOVDMyIHByaW9yaXR5LCBVSU5UMzIgZGF0YSwgdG9zX2lzcl90IGlzciwgdG9zX2Rzcl90IGRzciwgY3lnX2ludGVycnVwdCAqaW50ZXJydXB0KTsgDQorI2Vsc2UNCitVSU5UMzIgdG9zX2NyZWF0ZV9pcnEoVUlOVDMyIHZlY3RvciwgVUlOVDMyIHByaW9yaXR5LCBVSU5UMzIgZGF0YSwgdG9zX2lzcl90IGlzciwgdG9zX2Rzcl90IGRzcik7IA0KKyNlbmRpZg0KK3ZvaWQgdG9zX2RlbGV0ZV9pcnEoVUlOVDMyIGludGVycnVwdF9oYW5kbGUpOw0KKyAgICANCisjaWZkZWYgVE9TX1NUQVRJU1RJQ19JUlENCit2b2lkIHRvc19zdGF0aXN0aWNfaXJxX29wZW4odm9pZCk7DQordm9pZCB0b3Nfc3RhdGlzdGljX2lycV9jbG9zZSh2b2lkKTsNCit2b2lkIHRvc19zdGF0aXN0aWNfaXJxX2Fzc2VydCh2b2lkKTsNCit2b2lkIHRvc19zdGF0aXN0aWNfaXJxX3RocmVhZF9zdGFydCh2b2lkKTsNCit2b2lkIHRvc19zdGF0aXN0aWNfaXJxX3RocmVhZF9lbmQodm9pZCk7DQorI2VuZGlmDQorICAgIA0KKyNpZmRlZiBUT1NfVFJBQ0VfSVJRDQordm9pZCB0b3NfdHJhY2VfaXJxX29wZW4odm9pZCk7DQordm9pZCB0b3NfdHJhY2VfaXJxX2Nsb3NlKHZvaWQpOw0KK3ZvaWQgdG9zX3RyYWNlX2lycV9hc3NlcnQodm9pZCk7DQorI2VuZGlmDQorICAgIA0KK3N0YXRpYyBpbmxpbmUgU0lOVDMyIHRvc19nZXRfaXJxX25lc3RpbmdfbGV2ZWwoVk9JRCkNCit7DQorICAgIHJldHVybiB0b3NfaXJxX2xldmVsOw0KK30NCisNCitzdGF0aWMgaW5saW5lIFNJTlQzMiB0b3NfZ2V0X2lzcl9uZXN0aW5nX2xldmVsKFZPSUQpDQorew0KKyAgICByZXR1cm4gdG9zX2lzcl9sZXZlbDsNCit9DQorDQorc3RhdGljIGlubGluZSBTSU5UMzIgdG9zX2dldF9kc3JfbmVzdGluZ19sZXZlbChWT0lEKQ0KK3sNCisgICAgcmV0dXJuIHRvc19kc3JfbGV2ZWw7DQorfQ0KKw0KKyNpZmRlZiBfVVNFX09TU19NSU4NCitzdGF0aWMgaW5saW5lIFVJTlQzMiB0b3NfY3JlYXRlX2lzcihVSU5UMzIgdmVjdG9yLCAgICAgICAgICAgLyog1tC2z8/ywb8gICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgcHJpb3JpdHksICAgICAgICAgICAvKiDW0LbP08XPyLy2ICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBkYXRhLCAgICAgICAgICAgICAgIC8qIMr9vt3WuNXrICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9zX2lzcl90IGlzciwgICAgICAgICAgICAgLyog1tC2z7f+zvHA/bPMICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWdfaW50ZXJydXB0ICppbnRlcnJ1cHQpICAvKiDW0LbPveG5uczl1rjV6yAgICovDQorew0KKyAgICByZXR1cm4gdG9zX2NyZWF0ZV9pcnEodmVjdG9yLCAgICAgICAvKiDW0LbPz/LBvyAgICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHksICAgIC8qINbQts/Txc/IvLYgICAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCAgICAgICAgLyogyv2+3da41esgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzciwgICAgICAgICAvKiDW0LbPt/7O8cD9s8wgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgIC8qINbQts/R07PZt/7O8cD9s8wgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQpOyAgLyog1tC2z73hubnM5da41esgICAqLw0KK30NCisNCitzdGF0aWMgaW5saW5lIFVJTlQzMiB0b3NfY3JlYXRlX2RzcihVSU5UMzIgdmVjdG9yLCAgICAgICAgICAvKiDW0LbPz/LBvyAgICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBwcmlvcml0eSwgICAgICAgICAgIC8qINbQts/Txc/IvLYgICAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDMyIGRhdGEsICAgICAgICAgICAgICAgLyogyv2+3da41esgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3NfZHNyX3QgZHNyLCAgICAgICAgICAgICAvKiDW0LbPt/7O8cD9s8wgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5Z19pbnRlcnJ1cHQgKmludGVycnVwdCkgIC8qINbQts+94bm5zOXWuNXrICAgKi8NCit7DQorICAgIHJldHVybiB0b3NfY3JlYXRlX2lycSh2ZWN0b3IsICAgICAgICAgICAvKiDW0LbPz/LBvyAgICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHksICAgICAgICAvKiDW0LbP08XPyLy2ICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgICAgICAgICAgICAvKiDK/b7d1rjV6yAgICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9zX2RlZmF1bHRfaXNyLCAvKiDW0LbPt/7O8cD9s8wgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNyLCAgICAgICAgICAgICAvKiDW0LbP0dOz2bf+zvHA/bPMICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0KTsgICAgICAvKiDW0LbPveG5uczl1rjV6yAgICovDQorfQ0KKyNlbHNlDQorc3RhdGljIGlubGluZSBVSU5UMzIgdG9zX2NyZWF0ZV9pc3IoVUlOVDMyIHZlY3RvciwgICAgICAvKiDW0LbPz/LBvyAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgcHJpb3JpdHksICAgIC8qINbQts/Txc/IvLYgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBkYXRhLCAgICAgICAgLyogyv2+3da41esgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9zX2lzcl90IGlzcikgICAgICAvKiDW0LbPt/7O8cD9s8wgKi8NCit7DQorICAgIHJldHVybiB0b3NfY3JlYXRlX2lycSh2ZWN0b3IsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHksIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc3IsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog1tC2z7f+zvHA/bPMICovDQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgVUlOVDMyIHRvc19jcmVhdGVfZHNyKFVJTlQzMiB2ZWN0b3IsICAgICAgLyog1tC2z8/ywb8gICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDMyIHByaW9yaXR5LCAgICAvKiDW0LbP08XPyLy2ICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgZGF0YSwgICAgICAgIC8qIMr9vt3WuNXrICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvc19kc3JfdCBkc3IpICAgICAgLyog1tC2z7f+zvHA/bPMICovDQorew0KKyAgICByZXR1cm4gdG9zX2NyZWF0ZV9pcnEodmVjdG9yLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9zX2RlZmF1bHRfaXNyLCAgICAgICAgICAgICAgLyog1tC2z7f+zvHA/bPMICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICBkc3IpOyAgDQorfQ0KKyNlbmRpZg0KKw0KK3N0YXRpYyBpbmxpbmUgVk9JRCB0b3NfZGVsZXRlX2lzcihVSU5UMzIgaW50ZXJydXB0X2hhbmRsZSkNCit7DQorICAgIHRvc19kZWxldGVfaXJxKGludGVycnVwdF9oYW5kbGUpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIFZPSUQgdG9zX2RlbGV0ZV9kc3IoVUlOVDMyIGludGVycnVwdF9oYW5kbGUpDQorew0KKyAgICB0b3NfZGVsZXRlX2lycShpbnRlcnJ1cHRfaGFuZGxlKTsNCit9DQorI2VsaWYgZGVmaW5lZCBfT1NfTElOVVgNCitVSU5UMzIgbGludXhfZGVmYXVsdF9pc3IoIFVJTlQzMiB2ZWN0b3IsIFVJTlQzMiBkYXRhKTsNCisNCitVSU5UMzIgbGludXhfY3JlYXRlX2lycShVSU5UMzIgdmVjdG9yLCBVSU5UMzIgcHJpb3JpdHksIFVJTlQzMiBkYXRhLCBsaW51eF9pc3JfdCBpc3IsIGxpbnV4X2Rzcl90IGRzcik7IA0KKw0KK3ZvaWQgbGludXhfZGVsZXRlX2lycShVSU5UMzIgaW50ZXJydXB0X2hhbmRsZSk7DQorDQorc3RhdGljIGlubGluZSBVSU5UMzIgbGludXhfY3JlYXRlX2lzcihVSU5UMzIgdmVjdG9yLCAgICAgIC8qINbQts/P8sG/ICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBwcmlvcml0eSwgICAgLyog1tC2z9PFz8i8tiAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDMyIGRhdGEsICAgICAgICAvKiDK/b7d1rjV6yAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eF9pc3JfdCBpc3IpICAgICAgLyog1tC2z7f+zvHA/bPMICovDQorew0KKyAgICByZXR1cm4gMHgwMDsNCit9DQorDQorc3RhdGljIGlubGluZSBVSU5UMzIgbGludXhfY3JlYXRlX2RzcihVSU5UMzIgdmVjdG9yLCAgICAgIC8qINbQts/P8sG/ICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBwcmlvcml0eSwgICAgLyog1tC2z9PFz8i8tiAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDMyIGRhdGEsICAgICAgICAvKiDK/b7d1rjV6yAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eF9kc3JfdCBkc3IpICAgICAgLyog1tC2z7f+zvHA/bPMICovDQorew0KKyAgICByZXR1cm4gMHgwMDsNCit9DQorDQorc3RhdGljIGlubGluZSBWT0lEIGxpbnV4X2RlbGV0ZV9pc3IoVUlOVDMyIGludGVycnVwdF9oYW5kbGUpDQorew0KKyAgICBsaW51eF9kZWxldGVfaXJxKGludGVycnVwdF9oYW5kbGUpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIFZPSUQgbGludXhfZGVsZXRlX2RzcihVSU5UMzIgaW50ZXJydXB0X2hhbmRsZSkNCit7DQorICAgIGxpbnV4X2RlbGV0ZV9pcnEoaW50ZXJydXB0X2hhbmRsZSk7DQorfQ0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyKu+1rHkwb/J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBfT1NTX0lSUV9IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19rZXJuZWwuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3Nfa2VybmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwNWFiNwotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3Nfa2VybmVsLmgKQEAgLTAsMCArMSw2MzQgQEAKKy8qKg0KKyAqIEBmaWxlIG9zc19rZXJuZWwuaA0KKyAqIEBicmllZiCy2df3z7XNs8rKxeSy473Tv9rNt87EvP4NCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4NCisgKiANCisgKiANCisgKi8NCisNCisjaWZuZGVmIF9PU1NfS0VSTkVMX0gNCisjZGVmaW5lIF9PU1NfS0VSTkVMX0gNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBoZWFkZXIgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiDQorew0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qILbP0dQgKi8NCisvKioNCisgKiBAYnJpZWYgYXNzZXJ0ts/R1A0KKyAqIEBwYXJhbSBfRVhQIMjrss6jrNLss6Ox7bTvyr0NCisgKi8NCisjaWZkZWYgX0RFQlVHDQorIyBpZiBkZWZpbmVkIF9PU19XSU4NCisjICBkZWZpbmUgek9zc19BU1NFUlQoX0VYUCkgZG8ge2lmKCEoX0VYUCkpIEVYUF9IYW5kbGVyKCNfRVhQLCBfX0ZJTEVfXywgTlVMTCwgX19MSU5FX18pO30gd2hpbGUoMCkNCisjIGVsc2UNCisjICBkZWZpbmUgek9zc19BU1NFUlQoX0VYUCkgZG8ge2lmKCEoX0VYUCkpIEVYUF9IYW5kbGVyKCNfRVhQLCBOVUxMLCBOVUxMLCBfX0xJTkVfXyk7fSB3aGlsZSgwKQ0KKyMgZW5kaWYNCisjZWxzZQ0KKyMgZGVmaW5lIHpPc3NfQVNTRVJUKF9FWFApDQorI2VuZGlmDQorICAgIA0KKy8qKg0KKyAqIEBicmllZiC0+Le1u9jWtbXEYXNzZXJ0ts/R1A0KKyAqIEBwYXJhbSBfRVhQIMjrss6jrNLss6Ox7bTvyr0NCisgKiBAcGFyYW0gX1JFVCDI67LOo6y3tbvY1rUNCisgKi8NCisjZGVmaW5lIHpPc3NfQXNzZXJ0RXgoX0VYUCwgX1JFVCkgZG8ge2lmKCEoX0VYUCkpIHt6T3NzX0FTU0VSVCgoX0VYUCkpOyByZXR1cm4gKF9SRVQpO319IHdoaWxlKDApDQorDQorLyoqDQorICogQGJyaWVmILT4t7W72Na1us24vbzT1rTQ0LLZ1/e1xGFzc2VydLbP0dQNCisgKiBAcGFyYW0gX0VYUCDI67LOo6zS7LOjse2078q9DQorICogQHBhcmFtIF9BQ1QgyOuyzqOsuL2809a00NCy2df3DQorICogQHBhcmFtIF9SRVQgyOuyzqOst7W72Na1DQorICovDQorI2RlZmluZSB6T3NzX0Fzc2VydEV4QShfRVhQLCBfQUNULCBfUkVUKSBkbyB7aWYoIShfRVhQKSkge3pPc3NfQVNTRVJUKChfRVhQKSk7IF9BQ1Q7IHJldHVybiAoX1JFVCk7fX0gd2hpbGUoMCkNCisNCisvKioNCisgKiBAYnJpZWYgsru0+Le1u9jWtbXEYXNzZXJ0ts/R1A0KKyAqIEBwYXJhbSBfRVhQIMjrss6jrNLss6Ox7bTvyr0NCisgKi8NCisjZGVmaW5lIHpPc3NfQXNzZXJ0RXhOKF9FWFApIGRvIHtpZighKF9FWFApKSB7ek9zc19BU1NFUlQoKF9FWFApKTsgcmV0dXJuO319IHdoaWxlKDApDQorDQorLyogs6PTw7e1u9jWtSAqLw0KKy8qKg0KKyAqIEBicmllZiBaT1NTX1NVQ0NFU1O66rao0uUNCisgKi8NCisjZGVmaW5lIFpPU1NfU1VDQ0VTUyAgICAgICAgICAgIDB4MA0KKw0KKy8qKg0KKyAqIEBicmllZiBaT1NTX0VSUk9Suuq2qNLlDQorICovDQorI2RlZmluZSBaT1NTX0VSUk9SICAgICAgICAgICAgICAweGZmZmZmZmZmDQorDQorLyoqDQorICogQGJyaWVmIFpPU1NfTlVMTLrqtqjS5Q0KKyAqLw0KKyNkZWZpbmUgWk9TU19OVUxMICAgICAgICAgICAgICAgTlVMTCAgICAgICAgDQorDQorLyoqDQorICogQGJyaWVmIM7e0KfP37PMSUS66rao0uUNCisgKi8NCisjZGVmaW5lIFpPU1NfSU5WQUxJRF9USFJFQURfSUQgIE5VTEwNCisNCisvKioNCisgKiBAYnJpZWYgzt7Qp8jOzvFJRLrqtqjS5Q0KKyAqLw0KKyNkZWZpbmUgWk9TU19JTlZBTElEX1RBU0tfSUQgICAgTlVMTCAgICANCisNCisvKioNCisgKiBAYnJpZWYgzt7Qp7aoyrHG90lEuuq2qNLlDQorICovDQorI2RlZmluZSBaT1NTX0lOVkFMSURfVElNRVJfSUQgICBOVUxMDQorDQorLyoqDQorICogQGJyaWVmIM/fs8zD+9futPOzpLbIDQorICovIA0KKyNkZWZpbmUgTUFYX1RIUkVBRE5BTUVfTEVOICAgICAgNjMNCisNCisvKioNCisgKiBAYnJpZWYgvMbK/dDFusXBv8P7s8bX7rTzs6S2yA0KKyAqLw0KKyNkZWZpbmUgTUFYX1NFTU5BTUVfTEVOICAgICAgICAgNjMNCisNCisvKioNCisgKiBAYnJpZWYgu6Wz4tDFusXBv8P7s8bX7rTzs6S2yA0KKyAqLw0KKyNkZWZpbmUgTUFYX01VVEVYTkFNRV9MRU4gICAgICAgNjMNCisNCisNCisvKioNCisgKiBAYnJpZWYgtci0/bOsyrHK9NDUo6yyu7XItP0NCisgKi8NCisjZGVmaW5lIFpPU1NfTk9fV0FJVCAgICAgICAgICAgIDB4MCAgICAgICAgICANCisNCisvKioNCisgKiBAYnJpZWYgtci0/bOsyrHK9NDUo6zSu9axtci0/c/CyKUNCisgKi8NCisjZGVmaW5lIFpPU1NfV0FJVF9GT1JFVkVSICAgICAgIDB4ZmZmZmZmZmYNCisgICAgDQorDQorLyoqDQorICogQGJyaWVmILuls+LM5cr00NSjrLC008XPyLy2u/HIoQ0KKyAqLw0KKyNkZWZpbmUgWk9TU19JTkhFUklUICAgICAgICAgICAgMHgxDQorDQorLyoqDQorICogQGJyaWVmILuls+LM5cr00NSjrLC0y7PQ8rvxyKENCisgKi8NCisjZGVmaW5lIFpPU1NfTk9fSU5IRVJJVCAgICAgICAgIDB4MA0KKw0KKyNpZmRlZiBfT1NfTElOVVgNCisjIGRlZmluZSBaT1NTX1BSRUVNUFRfSVJRX1RIUkVBRCAgICAoMHhmZmZmZmZmZikNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioNCisgKiBAYnJpZWYg0MW6xcG/SUTK/b7dwODQzbao0uUNCisgKi8NCit0eXBlZGVmIFZPSUQgICAgKlpPU1NfU0VNQVBIT1JFX0lEOw0KKw0KKy8qKg0KKyAqIEBicmllZiC7pbPizOVJRMr9vt3A4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVk9JRCAgICAqWk9TU19NVVRFWF9JRDsNCisNCisvKioNCisgKiBAYnJpZWYgtqjKscb3SUTK/b7dwODQzbao0uUNCisgKi8NCit0eXBlZGVmIFZPSUQgICAgKlpPU1NfVElNRVJfSUQ7DQorDQorLyoqDQorICogQGJyaWVmIM/fs8xJRMr9vt3A4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVk9JRCAgICAqWk9TU19USFJFQURfSUQ7DQorDQorLyoqDQorICogQGJyaWVmIMjOzvFJRMr9vt3A4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVk9JRCAgICAqWk9TU19UQVNLX0lEOw0KKw0KKy8qKg0KKyAqIEBicmllZiC208HQSUTK/b7dwODQzbao0uUNCisgKi8NCit0eXBlZGVmIFZPSUQgICAgKlpPU1NfUVVFVUVfSUQ7DQorDQorLyoqDQorICogQGJyaWVmIMrCvP5JRMr9vt3A4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVk9JRCAgICAqWk9TU19FVkVOVF9JRDsNCisNCisvKioNCisgKiBAYnJpZWYgz9+zzLqvyv3A4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVk9JRCAgICAoKlpPU1NfVEhSRUFEX0ZVTikoU0lOVDMyKTsNCisNCisvKioNCisgKiBAYnJpZWYgtqjKscb3u9i197qvyv3A4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVk9JRCAgICAoKlpPU1NfVElNRVJfRlVOKShTSU5UMzIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiDP37PMubPX07qvyv3A4NDNtqjS5Q0KKyAqLw0KK3R5cGVkZWYgVUlOVDMyICAoKlRIUkVBRF9NU0dfSE9PSykoVUlOVDMyIG1zZ19pZCwgVk9JRCAqcF9idWYsIFVJTlQzMiBidWZfc2l6ZSwgVUlOVDggZGlyZSk7DQorDQorI2lmbmRlZiBET1hZR0VOX1NIT1VMRF9TS0lQX1RISVMNCisvKiDP37PMudzA7SAqLw0KKy8qKg0KKyAqIEBicmllZiDP37PMudzA7b3hubkNCisgKiBAcGFyYW0gdGhyZWFkaWQgICAgICAgICDP37PMaWQNCisgKiBAcGFyYW0gdGhyZWFkbmFtZSAgICAgICDP37PMw/uzxg0KKyAqIEBwYXJhbSBydW5zdGF0dXMgICAgICAgIM/fs8zUy9DQ17TMrA0KKyAqIEBwYXJhbSBwcmlvcml0eSAgICAgICAgIM/fs8zTxc/IvLYNCisgKiBAcGFyYW0gbWF4c3RhY2sgICAgICAgICDP37PM1bvX7rTz1bvKudPDwsoNCisgKiBAcGFyYW0gY3B1cGVyY2VudCAgICAgICDP37PMQ1BV1bzTw8LKDQorICogQHBhcmFtIHN0YWNrc2l6ZSAgICAgICAgz9+zzLbR1bu089ChIA0KKyAqIEBwYXJhbSBjcHV0aW1lICAgICAgICAgIM/fs8xDUFXVvNPDwsrKsbzkIA0KKyAqIEBwYXJhbSB0b3BzdGFjayAgICAgICAgIM/fs8zVu7altdjWtyANCisgKiBAcGFyYW0gcnVudGltZSAgICAgICAgICDP37PM1MvQ0MqxvOQgDQorICogQHBhcmFtIFJ1blRpbWVJbk1zICAgICAgDQorICogQHBhcmFtIG1zZ251bSAgICAgICAgICAgz9+zzM/7z6K208HQz/vPosr9IA0KKyAqIEBwYXJhbSBydW5jb3VudCAgICAgICAgIM/fs8zUy9DQtM7K/SANCisgKiBAcGFyYW0gY3VycGF0aCAgICAgICAgICDP37PMtbHHsMK3vrajrNPrb3PT0LnYIA0KKyAqIEBwYXJhbSBwdHJmICAgICAgICAgICAgILX3ytTP37PMtce8x7HtIA0KKyAqIEBwYXJhbSBjdXJ0YXNraWQgICAgICAgILWxx7DIzs7xSUQgDQorICogQHBhcmFtIGhlYXBzaXplICAgICAgICAgz9+zzMnqx+u20cTatOa089ChIA0KKyAqIEBwYXJhbSB1YnNpemUgICAgICAgICAgIM/fs8zJ6sfrxNq05rPYtPPQoSANCisgKiBAcGFyYW0gcHNtQ3B1VGltZSAgICAgICDP37PMcHNtvMbKscqxvOQgDQorICogQHBhcmFtIHNsZWVwVGltZXJJZCAgICAgz9+zzMuvw9/KsbS0vai1xLaoyrHG90lEIA0KKyAqIEBwYXJhbSBzbGVlcHNlbSAgICAgICAgIM/fs8zLr8PfyrG0tL2otcTQxbrFwb9JRCANCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgWk9TU19USFJFQURfSUQgICAgdGhyZWFkaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogz9+zzElEICAgICAgICAgICAgICAgICAgICovDQorICAgIENIQVIgICAgICAgICAgICAgIHRocmVhZG5hbWVbTUFYX1RIUkVBRE5BTUVfTEVOICsgMV07IC8qIM/fs8zD+yAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UOCAgICAgICAgICAgICBydW5zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDP37PM1MvQ0Ne0zKwgICAgICAgICAgICAgKi8NCisgICAgVUlOVDggICAgICAgICAgICAgcHJpb3JpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogz9+zzNPFz8i8tiAgICAgICAgICAgICAgICovDQorICAgIFVJTlQ4ICAgICAgICAgICAgIG1heHN0YWNrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIM/fs8zVu9futPPVu8q508PCyiAgICAgICAqLw0KKyAgICBGTE9BVCAgICAgICAgICAgICBjcHVwZXJjZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiDP37PMQ1BV1bzTw8LKICAgICAgICAgICAgKi8gDQorICAgIFVJTlQzMiAgICAgICAgICAgIHN0YWNrc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIM/fs8y20dW7tPPQoSAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgICBjcHV0aW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDP37PMQ1BV1bzTw8LKyrG85CAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgICAgdG9wc3RhY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogz9+zzNW7tqW12Na3ICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgIHJ1bnRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIM/fs8zUy9DQyrG85CAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgICBSdW5UaW1lSW5NczsNCisgICAgVUlOVDMyICAgICAgICAgICAgbXNnbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogz9+zzM/7z6K208HQz/vPosr9ICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgIHJ1bmNvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIM/fs8zUy9DQtM7K/SAgICAgICAgICAgICAqLw0KKyAgICBDSEFSICAgICAgICAgICAgICAqY3VycGF0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDP37PMtbHHsMK3vrajrNPrb3PT0LnYICAgKi8NCisgICAgVk9JRCAgICAgICAgICAgICAgKnB0cmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogtffK1M/fs8y1x7zHse0gICAgICAgICAgICovDQorICAgIFZPSUQgICAgICAgICAgICAgICpjdXJ0YXNraWQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qILWxx7DIzs7xSUQgICAgICAgICAgICAgICAqLyANCisgICAgVUlOVDMyICAgICAgICAgICAgaGVhcHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogz9+zzMnqx+u20cTatOa089ChICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgIHVic2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIM/fs8zJ6sfrxNq05rPYtPPQoSAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgICBwc21DcHVUaW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiDP37PMcHNtvMbKscqxvOQgICAgICAgICAgKi8NCisgICAgWk9TU19USU1FUl9JRCAgICAgc2xlZXBUaW1lcklkOyAgICAgICAgICAgICAgICAgICAgICAgLyogz9+zzMuvw9/KsbS0vai1xLaoyrHG90lEICovDQorICAgIFpPU1NfU0VNQVBIT1JFX0lEIHNsZWVwc2VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIM/fs8zLr8PfyrG0tL2otcTQxbrFwb9JRCAqLyAgICANCit9VF9aT3NhX1RocmVhZFVzZXJBcmVhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogz9+zzNPDu6e/1bzkICAgICAgICAgICAgICovDQorI2VuZGlmIC8vI2lmbmRlZiBET1hZR0VOX1NIT1VMRF9TS0lQX1RISVMNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiDP37PMudzA7SAqLw0KKyANCisgLyoqDQorICogQGJyaWVmILvxyKHTxc/IvLbWtb3Tv9oNCisgKiBAcGFyYW0gb2Zmc2V0IMjrss6jrMih1rUwfjMxDQorICogQHJldHVybiDI9LPJuaajrLe1u9jTxc/IvLbK/da1o7u38dTyt7W72FpPU1NfRVJST1INCisgKiBAcmV0dmFsINPFz8i8tsr91rUgICCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfR2V0UHJpb0NmZyhVSU5UOCBvZmZzZXQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiC0tL2oz9+zzL3Tv9oNCisgKiBAcGFyYW0gdGhyZWFkX25hbWUgICAgIMjrss6jrM/fs8zD+7PGDQorICogQHBhcmFtIGVudHJ5ICAgICAgICAgICDI67LOo6zP37PMyOu/2sq1zOW6r8r9DQorICogQHBhcmFtIGFyZyAgICAgICAgICAgICDI67LOo6zP37PMyrXM5bqvyv21xLLOyv0NCisgKiBAcGFyYW0gc3RhY2tfc2l6ZSAgICAgIMjrss6jrM/fs8zTtdPQtcS20dW7tPPQoQ0KKyAqIEBwYXJhbSBwcmlvcml0eSAgICAgICAgyOuyzqOsz9+zzLXE08XPyLXIvLYwfjMxDQorICogQHBhcmFtIHByZWVtcHQgICAgICAgICDI67LOo6zNrNPFz8i8ts/fs8zKx7fx1MrQ7cfA1byjrLfHMNa1zqrHwNW8z9+zzKOst/HU8s6qsru/ycfA1bzP37PMo6y8tNa00NDKsbzkxqy197bIDQorICogQHBhcmFtIGF1dG9fc3RhcnQgICAgICDI67LOo6y0tL2oz9+zzLrzyse38dfUtq/WtNDQDQorICogQHJldHVybiDI57n7tLS9qLPJuaa3tbvYz9+zzElEo6zKp7Dct7W72FpPU1NfSU5WQUxJRF9USFJFQURfSUQNCisgKiBAcmV0dmFsIFpPU1NfVEhSRUFEX0lEwODQzbXEz9+zzGlkICAgILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfSU5WQUxJRF9USFJFQURfSUQgICAgICAgIMqnsNwNCisgKiBAbm90ZSAgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1pPU1NfVEhSRUFEX0lEIHpPc3NfQ3JlYXRlVGhyZWFkKGNvbnN0IENIQVIgKnRocmVhZF9uYW1lLCBWT0lEICgqZW50cnkpKFNJTlQzMiksIFNJTlQzMiBhcmcsIFVJTlQzMiBzdGFja19zaXplLCBVSU5UMzIgcHJpb3JpdHksIFVJTlQzMiBwcmVlbXB0LCBVSU5UMzIgYXV0b19zdGFydCk7DQorDQorLyoqDQorICogQGJyaWVmIM3Ls/a1scewz9+zzL3Tv9oNCisgKiBAcGFyYW0gdm9pZA0KKyAqIEByZXR1cm4gdm9pZA0KKyAqIEBub3RlICAgDQorICogQHdhcm5pbmcgDQorICovDQorVk9JRCB6T3NzX0V4aXRUaHJlYWQoVk9JRCk7DQorDQorLyoqDQorICogQGJyaWVmIM/fs8y50sbwvdO/2g0KKyAqIEBwYXJhbSB0aHJlYWRfaWQgICAgIMjrss6jrNDo0qq50sbwtcTP37PMaWQNCisgKiBAcmV0dXJuIMj0s8m5pqOst7W72FpPU1NfU1VDQ0VTU6O7t/HU8s+1zbO2z9HUDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZSAgILG+uq/K/b/J0tTTw9Paz9+zzLXE19TO0rnSxvANCisgKiBAd2FybmluZyANCisgKi8NCitVSU5UMzIgek9zc19TdXNwZW5kVGhyZWFkKFpPU1NfVEhSRUFEX0lEIHRocmVhZF9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIM/fs8y71ri0vdO/2g0KKyAqIEBwYXJhbSB0aHJlYWRfaWQgICAgIMjrss6jrNDo0qq71ri0tcTP37PMaWQNCisgKiBAcmV0dXJuIMj0s8m5pqOst7W72FpPU1NfU1VDQ0VTU6O7t/HU8s+1zbO2z9HUDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZQ0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1VJTlQzMiB6T3NzX1Jlc3VtZVRocmVhZChaT1NTX1RIUkVBRF9JRCB0aHJlYWRfaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiDP37PMy6/D373Tv9oNCisgKiBAcGFyYW0gdGltZV9pbl9tcyAgICAgyOuyzqOsz9+zzL2r0qrLr8PftcTKsbzko6y1pc67o7ptcw0KKyAqIEByZXR1cm4gdm9pZA0KKyAqIEBub3RlDQorICogQHdhcm5pbmcgDQorICovDQorVk9JRCB6T3NzX1NsZWVwKFVJTlQzMiB0aW1lX2luX21zKTsNCisNCisvKioNCisgKiBAYnJpZWYgz9+zzMm+s/2907/aDQorICogQHBhcmFtIHRocmVhZF9pZCAgICAgyOuyzqOssbvJvrP9tcTP37PMaWQNCisgKiBAcmV0dXJuIMj0s8m5pqOst7W72FpPU1NfU1VDQ0VTU6O7t/HU8s+1zbO2z9HUDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZSAgIHpPc3NfQ3JlYXRlVGhyZWFkuq/K/dbQyerH67XEz9+zzNW7v9W85LrNz9+zzL/Y1sa/6b3hubm/1bzku+HU2g0KKyAqICAgICAgICAgQ3lnX1RocmVhZDo6ZXhpdLqvyv3W0MrNt8WjrNLyzqrU2mN5Z190aHJlYWRfZGVsZXRluq/K/da00NDN6rrzo6wNCisgKiAgICAgICAgILrzw+a1xMv509C0+sLry+bXxbG+z9+zzLXEz/vN9rb4seS1w87e0KfBy6GjDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfRGVsZXRlVGhyZWFkKFpPU1NfVEhSRUFEX0lEIHRocmVhZF9pZCk7DQorDQorLyoqDQorICogQGJyaWVmILvxyKG1scewz9+zzGlkvdO/2g0KKyAqIEBwYXJhbSB2b2lkDQorICogQHJldHVybiC1scewz9+zzGlkDQorICogQG5vdGUNCisgKiBAd2FybmluZyANCisgKi8NCitaT1NTX1RIUkVBRF9JRCB6T3NzX0dldEN1clRocmVhZElEKFZPSUQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiC4+b7dss7K/czhuam1xM/fs8zD+7PGo6yy6dXSuMPP37PMtcTP37PMaWQNCisgKiBAcGFyYW0gdGhyZWFkX25hbWUgICAgIMjrss6jrM/fs8zD+7PGDQorICogQHJldHVybiDI9LLp1dKzybmmo6y3tbvYz9+zzLXE09DQp8/fs8xpZKO7t/HU8s+1zbO2z9HUDQorICogQG5vdGUNCisgKiBAd2FybmluZyANCisgKi8NCitaT1NTX1RIUkVBRF9JRCB6T3NzX0dldFRocmVhZElEQnlOYW1lKGNvbnN0IENIQVIgKnRocmVhZF9uYW1lKTsgDQorDQorLyoqDQorICogQGJyaWVmILj5vt2yzsr9zOG5qbXEz9+zzGlko6y78cihuMPP37PMtcTP37PMw/uzxg0KKyAqIEBwYXJhbSB0aHJlYWRfaWQgICAgIMjrss6jrLT9u/HIoc/fs8zD+7PGtcTP37PMaWQNCisgKiBAcGFyYW0gdGhyZWFkX25hbWUgICCz9rLOo6zP37PMw/uzxrTmt8W12Na3DQorICogQHJldHVybiDI9LPJuaajrLe1u9jP37PMw/uzxta41euju7fx1PLPtc2zts/R1Lvyt7W72L/V1rjV6w0KKyAqIEByZXR2YWwgz9+zzMP7s8bWuNXrILPJuaYNCisgKiBAcmV0dmFsIE5VTEwgICDKp7DcDQorICogQG5vdGUNCisgKiBAd2FybmluZyANCisgKi8NCitDSEFSICp6T3NzX0dldFRocmVhZE5hbWUoWk9TU19USFJFQURfSUQgdGhyZWFkX2lkLCBDSEFSICp0aHJlYWRfbmFtZSk7DQorDQorLyoqDQorICogQGJyaWVmILj5vt2yzsr9zOG5qbXEz9+zzGlko6y78cihuMPP37PMtcTP37PM0MXPog0KKyAqIEBwYXJhbSB0aHJlYWRfaWQgICAgIMjrss6jrLT9u/HIoc/fs8zQxc+itcTP37PMaWQNCisgKiBAcGFyYW0gdGhyZWFkX25hbWUgICCz9rLOo6zP37PMw/uzxrTmt8W12Na3DQorICogQHBhcmFtIHN0YXQgICAgICAgICAgs/ayzqOsz9+zzNe0zKy05rfFtdjWtw0KKyAqIEBwYXJhbSBwcmlvcml0eSAgICAgILP2ss6jrM/fs8zTxc/IvLa05rfFtdjWtw0KKyAqIEBwYXJhbSBwcmVlbXB0ICAgICAgILP2ss6jrM/fs8y/ycfA1by05rfFtdjWtw0KKyAqIEByZXR1cm4gyPSzybmmo6y3tbvYWk9TU19TVUNDRVNTo7u38dTyz7XNs7bP0dQNCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfR2V0VGhyZWFkSW5mbyhaT1NTX1RIUkVBRF9JRCB0aHJlYWRfaWQsIENIQVIgKnRocmVhZF9uYW1lLCBVSU5UMzIgKnN0YXQsIFVJTlQzMiAqcHJpb3JpdHksIFVJTlQzMiAqcHJlZW1wdCk7DQorDQorLyoqDQorICogQGJyaWVmILj5vt2yzsr9zOG5qbXEz9+zzGlko6zJ6NbDuMPP37PMtcTP37PM08XPyLy2DQorICogQHBhcmFtIHRocmVhZF9pZCAgICAgyOuyzqOstP3J6NbD08XPyLy2tcTP37PMaWQNCisgKiBAcGFyYW0gcHJpb3JpdHkgICAgICDI67LOo6zP37PMvauxu8no1sO1xNPFz8i8tg0KKyAqIEByZXR1cm4gyPSzybmmo6y3tbvYWk9TU19TVUNDRVNTo7u38dTyz7XNs7bP0dQNCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfU2V0VGhyZWFkUHJpKFpPU1NfVEhSRUFEX0lEIHRocmVhZF9pZCwgVUlOVDMyIHByaW9yaXR5KTsNCisNCisvKioNCisgKiBAYnJpZWYguPm+3bLOyv3M4bmptcTP37PMaWSjrLvxyKG4w8/fs8y1xM/fs8zTxc/IvLYNCisgKiBAcGFyYW0gdGhyZWFkX2lkICAgICDI67LOo6y0/cno1sPTxc/IvLa1xM/fs8xpZA0KKyAqIEBwYXJhbSBwcmlvcml0eSAgICAgILP2ss6jrLvxyKG1xM/fs8zTxc/IvLa05rfFtdjWtw0KKyAqIEByZXR1cm4gyPSzybmmo6y3tbvYWk9TU19TVUNDRVNTo7u38dTyz7XNs7bP0dQNCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfR2V0VGhyZWFkUHJpKFpPU1NfVEhSRUFEX0lEIHRocmVhZF9pZCwgVUlOVDMyICpwcmlvcml0eSk7DQorDQorLyoqDQorICogQGJyaWVmINHp1qTSu7j2z9+zzMrHt/HT0NCnDQorICogQHBhcmFtIHRocmVhZElEICAgICDI67LOo6y0/dHp1qS1xM/fs8xpZA0KKyAqIEByZXR1cm4gyPTP37PM09DQp6Ost7W72FpPU1NfU1VDQ0VTU6O7t/HU8s+1zbO2z9HUDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZQ0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1VJTlQzMiB6T3NzX0lkZW50aWZ5VGhyZWFkKFpPU1NfVEhSRUFEX0lEIHRocmVhZElEKTsNCisNCisvKiDP37PMz/vPorncwO3Eo7/pICovDQorLyoqDQorICogQGJyaWVmILTTxNq05rPYyerH68/7z6LNtyu7urPlx/ijrLKit7W72Lu6s+XH+Na41esNCisgKiBAcGFyYW0gc2l6ZSAgICAgyOuyzqOsu7qz5cf4tPPQoQ0KKyAqIEByZXR1cm4gu7qz5cf41rjV6w0KKyAqIEBub3RlILjDyerH673Tv9qjrLvhtPjXxc/7z6LNt9K7xvDJ6sfro6y1q7e1u9i4+NPDu6e1xMrHsP7A68HLz/vPos23tcTTw7unyrnTw7/VvOS12Na3DQorICogQHdhcm5pbmcgsdjQ67rNek9zc19UaHJlYWRSZXRNc2dCdWbF5LbUyrXP1g0KKyAqLw0KK1ZPSUQgKnpPc3NfVGhyZWFkR2V0TXNnQnVmKFVJTlQzMiBzaXplKTsgDQorDQorLyoqDQorICogQGJyaWVmIM/yxNq05rPYys23xc/7z6LNtyu7urPlx/gNCisgKiBAcGFyYW0gcF9idWYgICAgIMjrss6jrLu6s+XH+Na41esNCisgKiBAcmV0dXJuIHZvaWQNCisgKiBAbm90ZSC4w8rNt8W907/au+G0+NfFz/vPos230rvG8MrNt8UNCisgKiBAd2FybmluZyCx2NDrus16T3NzX1RocmVhZEdldE1zZ0J1ZsXkttTKtc/WDQorICovDQorVk9JRCB6T3NzX1RocmVhZFJldE1zZ0J1ZihWT0lEICpwX2J1Zik7DQorDQorLyoqDQorICogQGJyaWVmIM/ydGhyZWFkX2lkz9+zzLeiy83P+8+iDQorICogQHBhcmFtIG1zZ19pZCAgICAgICDI67LOo6zP+8+iaWQNCisgKiBAcGFyYW0gcF9idWYgICAgICAgIMjrss6jrLu6s+XH+Na41esNCisgKiBAcGFyYW0gYnVmX3NpemUgICAgIMjrss6jrLu6s+XH+LTz0KENCisgKiBAcGFyYW0gdGhyZWFkX2lkICAgIMjrss6jrMS/serP37PMaWQNCisgKiBAcmV0dXJuILPJuaajrLe1u9haT1NTX1NVQ0NFU1OjrLfx1PK3tbvYWk9TU19FUlJPUg0KKyAqIEByZXR2YWwgWk9TU19TVUNDRVNTILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfRVJST1IgICDKp7DcDQorICogQG5vdGUgsdjQ67rNek9zc19UaHJlYWRSZWN2TXNnxeS21Mq1z9YNCisgKiBAd2FybmluZyANCisgKi8NCitVSU5UMzIgek9zc19UaHJlYWRTZW5kTXNnKFVJTlQzMiBtc2dfaWQsIFZPSUQgKnBfYnVmLCBVSU5UMTYgYnVmX3NpemUsIFpPU1NfVEhSRUFEX0lEIHRocmVhZF9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIM/fs8y908rVz/vPog0KKyAqIEBwYXJhbSBwX21zZ19pZCAgICAgyOuyzqOsz/vPomlktcS05rfFtdjWtw0KKyAqIEBwYXJhbSBwX2J1ZiAgICAgICAgyOuyzqOsz/vPota41eu1xLTmt8W12Na3DQorICogQHBhcmFtIHBfYnVmX3NpemUgICDI67LOo6zP+8+itPPQobXEtOa3xbXY1rcNCisgKiBAcGFyYW0gdGltZW91dCAgICAgIMjrss6jrL3TytXP+8+itcSzrMqxyrG85A0KKyAqIEByZXR1cm4gs8m5pqOst7W72FpPU1NfU1VDQ0VTU6Ost/HU8re1u9haT1NTX0VSUk9SDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZSAgsdjQ67rNek9zc19UaHJlYWRTZW5kTXNnxeS21Mq1z9YNCisgKiBAd2FybmluZyANCisgKi8NCitVSU5UMzIgek9zc19UaHJlYWRSZWN2TXNnKFVJTlQzMiAqcF9tc2dfaWQsIFZPSUQgKipwX2J1ZiwgVUlOVDMyICpwX2J1Zl9zaXplLCBVSU5UMzIgdGltZW91dCk7DQorDQorLyoqDQorICogQGJyaWVmINeisuHP37PMz/vPormz19O6r8r9DQorICogQHBhcmFtIHRocmVhZF9pZCAgIMjrss6jrM/fs8xpZA0KKyAqIEBwYXJhbSB0eXBlICAgICAgICDI67LOo6y5s9fTuq/K/cDg0M0NCisgKiBAcGFyYW0gZGlyZSAgICAgICAgyOuyzqOsubPX07qvyv3F5NbDDQorICogQHBhcmFtIGZ1bmMgICAgICAgIMjrss6jrLmz19O6r8r91rjV6w0KKyAqIEByZXR1cm4gs8m5pqOst7W72FpPU1NfU1VDQ0VTU6Ost/HU8re1u9haT1NTX0VSUk9SDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZSAgDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfUmVnVGhyZWFkTXNnSG9vayhaT1NTX1RIUkVBRF9JRCB0aHJlYWRfaWQsIFVJTlQ4IHR5cGUsIFVJTlQ4IGRpcmUsIFRIUkVBRF9NU0dfSE9PSyBmdW5jKTsNCisNCisvKiDP+8+izajRtiAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiDP8ta4tqi1xM/fs8y3osvNz/vPog0KKyAqIEBwYXJhbSB0aHJlYWRfaWQgICAgIMjrss6jrMS/serP37PMtcTP37PMaWQNCisgKiBAcGFyYW0gbXNnX3B0ciAgICAgICDI67LOo6zP+8+iyv2+3bXE1rjV6w0KKyAqIEBwYXJhbSBzaXplICAgICAgICAgIMjrss6jrM/7z6K1xLTz0KENCisgKiBAcGFyYW0gdGltZW91dCAgICAgICDI67LOo6y3osvNz/vPorXEs6zKscqxvOQNCisgKiBAcmV0dXJuILPJuaajrLe1u9haT1NTX1NVQ0NFU1OjrLfx1PK3tbvYWk9TU19FUlJPUg0KKyAqIEByZXR2YWwgWk9TU19TVUNDRVNTILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfRVJST1IgICDKp7DcDQorICogQG5vdGUgIMj0ss7K/XRpbWVvdXTKx1pPU1NfV0FJVF9GT1JFVkVSo6zU8tK71rG1yLT9z/vPoreiy82zybmm1Nm3tbvYo7sNCisgICAgICAgICAgyPSyzsr9dGltZW91dMrHWk9TU19OT19XQUlUo6zU8rOiytS3osvNz/vPoqOst6LLzcqnsNyjrNaxvdO3tbvYo7sNCisgICAgICAgICAgt/HU8nRpbWVvdXTKx7OsyrG1xMqxvOSjrLzGy+O3vbeoyse9q7Wxx7DPtc2zyrG85LrNdGltZW91dM/gvNOjrA0KKyAgICAgICAgICAgICAgICCzyc6qYWJzX3RpbWVvdXQsyLu688b0tq/Su7j2tqjKscb3o6zWsdbBz/vPoreiy82zybmmu/KzrMqxDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfU2VuZE1zZyhaT1NTX1RIUkVBRF9JRCB0aHJlYWRfaWQsIFZPSUQgKm1zZ19wdHIsIFVJTlQzMiBzaXplLCBVSU5UMzIgdGltZW91dCk7DQorDQorLyoqDQorICogQGJyaWVmIL3TytXP+8+iDQorICogQHBhcmFtIG1zZ19wdHIgICAgILP2ss6jrM/7z6LWuNXrtcS05rfFtdjWtw0KKyAqIEBwYXJhbSBzaXplICAgICAgICCz9rLOo6zP+8+iyv2+3bTz0KG1xLTmt8W12Na3DQorICogQHBhcmFtIHRpbWVvdXQgICAgIMjrss6jrL3TytXP+8+itcSzrMqxyrG85A0KKyAqIEByZXR1cm4gs8m5pqOst7W72FpPU1NfU1VDQ0VTU6Ost/HU8re1u9haT1NTX0VSUk9SDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZSAgyPSyzsr9dGltZW91dMrHWk9TU19XQUlUX0ZPUkVWRVKjrNTy0rvWsbXItP3P+8+it6LLzbPJuabU2be1u9ijuw0KKyAgICAgICAgICDI9LLOyv10aW1lb3V0ysdaT1NTX05PX1dBSVSjrNTys6LK1Leiy83P+8+io6y3osvNyqew3KOs1rG907e1u9ijuw0KKyAgICAgICAgICC38dTydGltZW91dMrHs6zKsbXEyrG85KOsvMbL47e9t6jKx72rtbHHsM+1zbPKsbzkus10aW1lb3V0z+C806OsDQorICAgICAgICAgICAgICAgILPJzqphYnNfdGltZW91dCzIu7rzxvS2r9K7uPa2qMqxxvejrNax1sHP+8+it6LLzbPJuaa78rOsyrENCisgKiBAd2FybmluZyANCisgKi8NCitVSU5UMzIgek9zc19SZWN2TXNnKFZPSUQgKiptc2dfcHRyLCBVSU5UMzIgKnNpemUsIFVJTlQzMiB0aW1lb3V0KTsNCisNCisvKiC8xsr90MW6xcG/ICovDQorLyoqDQorICogQGJyaWVmILS0vajQxbrFwb8NCisgKiBAcGFyYW0gbmFtZV9wdHIgICAgICAgIMjrss6jrNDFusXBv7XEw/uzxg0KKyAqIEBwYXJhbSBpbml0aWFsX2NvdW50ICAgyOuyzqOs0MW6xcG/tcSz9cq8vMbK/da1DQorICogQHJldHVybiC0tL2os8m5pqOst7W72NDFusXBv7XEvuSx+qO7t/HU8s+1zbO2z9HUDQorICogQG5vdGUgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1pPU1NfU0VNQVBIT1JFX0lEIHpPc3NfQ3JlYXRlU2VtYXBob3JlKGNvbnN0IENIQVIgKm5hbWVfcHRyLCBVSU5UMzIgaW5pdGlhbF9jb3VudCk7DQorDQorLyoqDQorICogQGJyaWVmILvxyKHQxbrFwb8NCisgKiBAcGFyYW0gc2VtX2lkICAgyOuyzqOs1f3U2rvxyKG1xNDFusXBv2lkDQorICogQHBhcmFtIHRpbWVvdXQgIMjrss6jrLOsyrG8xsr9DQorICogQHJldHVybiCzybmmo6y3tbvYWk9TU19TVUNDRVNTo6y38dTyt7W72FpPU1NfRVJST1INCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlICDI9LLOyv10aW1lb3V0ysdaT1NTX1dBSVRfRk9SRVZFUqOs1PLSu9axtci0/c/7z6K3osvNs8m5ptTZt7W72KO7DQorICAgICAgICAgICAgICAgIMj0ss7K/XRpbWVvdXTKx1pPU1NfTk9fV0FJVKOs1PKzosrUt6LLzc/7z6KjrLeiy83Kp7Dco6zWsb3Tt7W72KO7DQorICAgICAgICAgICAgICAgILfx1PJ0aW1lb3V0ysezrMqxtcTKsbzko6y8xsvjt723qMrHvau1scewz7XNs8qxvOS6zXRpbWVvdXTP4LzTo6wNCisgICAgICAgICAgICAgICAgs8nOqmFic190aW1lb3V0LMi7uvPG9Lav0ru49raoyrHG96Os1rHWwc/7z6K3osvNs8m5prvys6zKsQ0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1VJTlQzMiB6T3NzX0dldFNlbWFwaG9yZShaT1NTX1NFTUFQSE9SRV9JRCBzZW1faWQsIFVJTlQzMiB0aW1lb3V0KTsNCisNCisvKioNCisgKiBAYnJpZWYgys23xdDFusXBvw0KKyAqIEBwYXJhbSBzZW1faWQgICDI67LOo6zV/dTays23xbXE0MW6xcG/aWQNCisgKiBAcmV0dXJuIMj0s8m5pqOst7W72FpPU1NfU1VDQ0VTU6O7t/HU8s+1zbO2z9HUDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZSAgDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfUHV0U2VtYXBob3JlKFpPU1NfU0VNQVBIT1JFX0lEIHNlbV9pZCk7DQorDQorLyoqDQorICogQGJyaWVmILvxyKHQxbrFwb+1xLWxx7C8xsr91rUNCisgKiBAcGFyYW0gc2VtX2lkICAgyOuyzqOs1f3U2rG7u/HIobzGyv3WtbXE0MW6xcG/aWQNCisgKiBAcmV0dXJuILjD0MW6xcG/tcS1scewvMbK/da1DQorICogQG5vdGUgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1VJTlQzMiB6T3NzX0dldFNlbWFwaG9yZUNvdW50KFpPU1NfU0VNQVBIT1JFX0lEIHNlbV9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIMm+s/3QxbrFwb8NCisgKiBAcGFyYW0gc2VtX2lkICAgyOuyzqOssbvJvrP9tcTQxbrFwb9pZA0KKyAqIEByZXR1cm4gyPSzybmmo6y3tbvYWk9TU19TVUNDRVNTo7u38dTyz7XNs7bP0dQNCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlICANCisgKiBAd2FybmluZyANCisgKi8NCitVSU5UMzIgek9zc19EZWxldGVTZW1hcGhvcmUoWk9TU19TRU1BUEhPUkVfSUQgc2VtX2lkKTsNCisNCisvKiC7pbPi0MW6xcG/ICovDQorLyoqDQorICogQGJyaWVmILS0vai7pbPizOUNCisgKiBAcGFyYW0gbmFtZV9wdHIgICAgICAgICAgyOuyzqOsu6Wz4szlw/uzxg0KKyAqIEBwYXJhbSBwcmlvcml0eV9pbmhlcml0ICDI67LOo6y7pbPizOXK9NDUo6zI57n7ysdaT1NTX0lOSEVSSVSjrNTyz9+zzNauvOSwtA0KKyAgICAgICAgICAgICAgICDTxc/IvLbLs9Dyu/HIobuls+LM5aO7yOe5+8rHWk9TU19OT19JTkhFUklUo6zU8rC0tci0/bXEy7PQ8rvxyKENCisgICAgICAgICAgICAgICAgu6Wz4szlDQorICogQHJldHVybiDI9LPJuaajrLe1u9i0tL2otcS7pbPizOW+5LH6o7u38dTyz7XNs7bP0dQNCisgKiBAbm90ZSANCisgKiBAd2FybmluZyANCisgKi8NCitaT1NTX01VVEVYX0lEIHpPc3NfQ3JlYXRlTXV0ZXgoY29uc3QgQ0hBUiAqbmFtZV9wdHIsIFVJTlQzMiBwcmlvcml0eV9pbmhlcml0KTsNCisNCisvKioNCisgKiBAYnJpZWYgu/HIobuls+LM5Q0KKyAqIEBwYXJhbSBtdXRleF9pZCAgIMjrss6jrLT9u/HIobXEu6Wz4szlaWQNCisgKiBAcGFyYW0gdGltZW91dCAgICDI67LOo6y78cihtcSzrMqxyrG85A0KKyAqIEByZXR1cm4gs8m5pqOst7W72FpPU1NfU1VDQ0VTU6Ost/HU8re1u9haT1NTX0VSUk9SDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1Mgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgIMqnsNwNCisgKiBAbm90ZSAgDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfR2V0TXV0ZXgoWk9TU19NVVRFWF9JRCBtdXRleF9pZCwgVUlOVDMyIHRpbWVvdXQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiDKzbfFu6Wz4szlDQorICogQHBhcmFtIG11dGV4X2lkICAgyOuyzqOstP3KzbfFtcS7pbPizOVpZA0KKyAqIEByZXR1cm4gyPSzybmmo6y3tbvYWk9TU19TVUNDRVNTo7u38dTyz7XNs7bP0dQNCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1VJTlQzMiB6T3NzX1B1dE11dGV4KFpPU1NfTVVURVhfSUQgbXV0ZXhfaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiDP+rvZu6Wz4szlDQorICogQHBhcmFtIG11dGV4X2lkICAgyOuyzqOstP3P+rvZtcS7pbPizOVpZA0KKyAqIEByZXR1cm4gyPSzybmmo6y3tbvYWk9TU19TVUNDRVNTo7u38dTyz7XNs7bP0dQNCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgyqew3A0KKyAqIEBub3RlICANCisgKiBAd2FybmluZyANCisgKi8NCitVSU5UMzIgek9zc19EZWxldGVNdXRleChaT1NTX01VVEVYX0lEIG11dGV4X2lkKTsNCisNCisvKiDKsbzkICovDQorLyoqDQorICogQGJyaWVmILvxyKGy2df3z7XNs7XEtbHHsLXOtPDK/Q0KKyAqIEBwYXJhbSB2b2lkIA0KKyAqIEByZXR1cm4gt7W72LLZ1/fPtc2ztcS1scewtc608Mr9DQorICogQHJldHZhbCC1zrTwyv0NCisgKiBAbm90ZSAgDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfR2V0VGlja0NvdW50KFZPSUQpOw0KKw0KKyNpZm5kZWYgRE9YWUdFTl9TSE9VTERfU0tJUF9USElTDQorLyogQ1BVyrnTw8LKzbO8xiAqLw0KK1VJTlQ4IHpPc3NfR2V0Q1BVKFZPSUQpOw0KKw0KKy8qINLss6O0psDtICovDQorVk9JRCBFWFBfSGFuZGxlcihjb25zdCBDSEFSICpwRXhwLCBjb25zdCBDSEFSICpwY0ZpbGVOYW1lLCBjb25zdCBDSEFSICpwY0Z1bmNOYW1lLCBTSU5UMzIgZHdMaW5lTnVtKTsNCisNCisjZW5kaWYgLy8jaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgICAgICAgSW5saW5lIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgIC8vICNpZm5kZWYgX09TU19LRVJORUxfSA0KKw0KZGlmZiAtLWdpdCBhL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfbWVtLmggYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX21lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNTM4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX21lbS5oCkBAIC0wLDAgKzEsMTk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAxMiBaVEUgQ29ycG9yYXRpb24uDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogxKMgv+kgw/sgOiBQOThDX09TUw0KKyogzsQgvP4gw/sgOiBvc3NfbWVtLmgNCisqIM/gudjOxLz+IDogDQorKiDKtc/WuabE3CA6IMTatObJ6sfroaLKzbfFvdO/2g0KKyog1/cgICAg1d8gOiBjaGVueGluZ2ZhbmcNCisqILDmICAgILG+IDogVjEuMA0KKyogzeqzycjVxtogOiAyMDEyLTA4LTEwIA0KKyogxuTL/Mu1w/cgOiANCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqINDeuMS8x8K8DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmbmRlZiBfT1NTX01FTV9IDQorI2RlZmluZSBfT1NTX01FTV9IDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAjaW5jbHVkZcf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9PU19UT1MNCisjaW5jbHVkZSAidG9zX3Bvb2wuaCINCisjaW5jbHVkZSAidG9zX2hlYXAuaCINCisjZWxpZiBkZWZpbmVkIF9PU19MSU5VWA0KKyNpbmNsdWRlICJvc3NfcG9vbC5oIg0KKyNpbmNsdWRlICJsaW51eC9tbS5oIg0KKyNlbmRpZg0KKyNpbmNsdWRlICJvc3NfcHViLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIg0KK3sNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILOjwb+2qNLlx/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiBVQiAqLw0KKyNkZWZpbmUgek9zc19HZXRVQihzaXplKSAgICAgICAgICAgIG1lbV9nZXR1YihzaXplLCBaT1NTX0ZJTEUsIFpPU1NfTElORSkNCisjZGVmaW5lIHpPc3NfUmV0VUIobXNnX3B0cikgICAgICAgICBtZW1fcmV0dWIobXNnX3B0ciwgWk9TU19GSUxFLCBaT1NTX0xJTkUpDQorDQorLyogVULE2rTmxeTWw7LOyv0gKi8NCisjZGVmaW5lIE1FTV9NQVhfTEVBS19VQiAgICAgICAgICAgICAyMDAgICAgIC8qIMTatObQucK2sunRr7e1u9i1xNfutPPM9cr9ICAgKi8gDQorI2RlZmluZSBaT1NTX1VCX01BWF9QT09MTlVNICAgICAgICAgMTUgICAgICAvKiDE2rTms9i49sr9LCDX7rTzsrvE3LOsuf0yNTUgICovDQorI2RlZmluZSBaT1NTX1VCSEVBRF9GSUxFTkFNRV9MRU4gICAgMzEgICAgICAvKiBVQsTatObJ6sfrzsS8/sP7ICAgICAgICAgICAgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDK/b7dveG5ubao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3R5cGVkZWYgVk9JRCAqWk9TU19VQl9CTE9DSzsgICAgLyogxNq05r/ptdjWt9a41esgKi8NCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFVJTlQzMiBuTWVtVXNlZDsgICAgICAgICAgICAvKiDS0cq508PE2rTmtPPQoaOs0tTX1r3ase3KviAgICovDQorICAgIFVJTlQzMiBuTWVtVG90YWw7ICAgICAgICAgICAvKiDE2rTm19y1xLTz0KGjrNLU19a92rHtyr4gICAgICovDQorICAgIFVJTlQzMiBuTWVtTWF4RnJlZTsJCQkvKiC/ydLUyerH67XE1+6088TatOYgICAgICAgICAgICovDQorfVRfTWVtX01lbUluZm87ICAgICAgICAgICAgICAvKiDE2rTmu/mxvtDFz6IgICAgICAgICAgICAgICAgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgDQorew0KKyAgICBVSU5UMzIgIHBvb2xfc2l6ZTsgICAgICAgICAgLyogxNq05rPYtPPQoSy1pc67zqpieXRlICAgICovDQorICAgIFVJTlQzMiAgdG90YWxfYmxvY2tfbnVtOyAgICAvKiDUpLaoxNq05r/pyv3EvyAgICAgICAgICAgKi8NCit9VF9aT3NzX1VCUE9PTDsgICAgICAgICAgICAgIC8qIMTatOaz2MXk1sOx7SAgICAgICAgICAgICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgVUlOVDMyICBwb29sX3NpemU7ICAgICAgICAgIC8qIMTatOaz2LTz0KEstaXOu86qYnl0ZSAgICAqLw0KKyAgICBVSU5UMTYgIHRvdGFsX2Jsb2NrX251bTsgICAgLyogxNq05r/p19zK/cS/ICAgICAgICAgICAgICovDQorICAgIFVJTlQxNiAgZnJlZV9ibG9ja19udW07ICAgICAvKiC/1c/QxNq05r/pyv3EvyAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICBwZWFrX3ZhbHVlOyAgICAgICAgIC8qIMTatOa/6dfutPPKudPDuPbK/SAgICAgICAqLw0KK31UX01lbV9VQlBvb2xJbmZvOyAgICAgICAgICAvKiDE2rTms9jQxc+iICAgICAgICAgICAgICAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFpPU1NfVUJfQkxPQ0sgICB1YkJsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDE2rTmv+nWuNXrICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgIHViQmxvY2tTaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIMTatOa/6bTz0KEstaXOu86qYnl0ZSAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgdXNpbmdTaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogyrW8ytW808O089ChICAgICAgICAgICAgICovDQorICAgIENIQVIgICAgICAgICAgICBuYW1lW1pPU1NfVUJIRUFEX0ZJTEVOQU1FX0xFTiArIDFdOyAvKiDJ6sfrzrvWw87EvP7D+yAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgIGxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIMnqx+vOu9bD0NC6xSAgICAgICAgICAgICAqLw0KKyAgICBaT1NTX1RIUkVBRF9JRCAgdGhyZWFkSWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogyerH68/fs8xJRCAgICAgICAgICAgICAgICovDQorICAgIFpPU1NfVEFTS19JRCAgICB0YXNrSWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDJ6sfryM7O8brFICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgIGFwcGx5VGltZVRpY2s7ICAgICAgICAgICAgICAgICAgICAgIC8qIMnqx+vKsbzkKFRJQ0spICAgICAgICAgICAqLw0KK31UX01lbV9VQkJsb2NrSW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDQucK2xNq05r/pxNq05s230MXPoiAgICAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFVJTlQ4ICAgICAgICAgICAgICAgcG9vbF9udW07ICAgLyogxNq05rPY19zK/SAgICovDQorICAgIFRfTWVtX1VCUG9vbEluZm8gICAgcG9vbF9pbmZvW1pPU1NfVUJfTUFYX1BPT0xOVU1dOw0KK31UX01lbV9VQlBvb2xHcnBJbmZvOyAgICAgICAgICAgLyogxNq05rPY19zQxc+iICovDQorIA0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgVUlOVDE2ICAgICAgICAgICAgICB1Yl9sZWFrX251bTsgICAgLyogxNq05tC5wrbK/cS/LNfutPPOqk1FTV9NQVhfTEVBS19VQiAgICovDQorICAgIFRfTWVtX1VCQmxvY2tJbmZvICAgdWJIZWFkSW5mb1tNRU1fTUFYX0xFQUtfVUJdOw0KK31UX01lbV9VQkxlYWtJbmZvOyAgICAgICAgICAgICAgICAgIC8qIMTatObQucK20MXPoiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cn5w/fH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgICANCisjaWZkZWYgX09TX0xJTlVYDQorDQorI2lmIGRlZmluZWQoX1VCX1VTRV9IRUFQX0RFQlVHKQ0KK2V4dGVybiB2b2lkICp1Yl9kZWJ1Z19hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGluZSk7DQorZXh0ZXJuIHZvaWQgdWJfZGVidWdfZnJlZSh2b2lkICpwdHIpOw0KK3N0YXRpYyBpbmxpbmUgVk9JRCAqbWVtX2dldHViKFVJTlQzMiBzaXplLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSkNCit7DQorCXJldHVybiB1Yl9kZWJ1Z19hbGxvYyhzaXplLCBmaWxlLCBsaW5lKTsNCit9DQorc3RhdGljIGlubGluZSBVSU5UMzIgbWVtX3JldHViKFZPSUQgKm1zZ19wdHIsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKQ0KK3sNCisJdWJfZGVidWdfZnJlZShtc2dfcHRyKTsNCisNCisgICAgcmV0dXJuIFpPU1NfU1VDQ0VTUzsNCit9DQorI2VsaWYgZGVmaW5lZChfVUJfVVNFX0hFQVApDQorc3RhdGljIGlubGluZSBWT0lEICptZW1fZ2V0dWIoVUlOVDMyIHNpemUsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKQ0KK3sNCisJLy96T3NzX0FTU0VSVChQQUdFX1NJWkUgPT0gNDA5Nik7DQorCWlmKHNpemUgPD0gUEFHRV9TSVpFKQ0KKwkJcmV0dXJuIGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7DQorCWVsc2UNCisJCXJldHVybiB2bWFsbG9jKHNpemUpOw0KK30NCitzdGF0aWMgaW5saW5lIFVJTlQzMiBtZW1fcmV0dWIoVk9JRCAqbXNnX3B0ciwgY29uc3QgQ0hBUiAqZmlsZSwgVUlOVDMyIGxpbmUpDQorew0KKwlpZighaXNfdm1hbGxvY19hZGRyKG1zZ19wdHIpKQ0KKwkJa2ZyZWUobXNnX3B0cik7DQorCWVsc2UNCisJCXZmcmVlKG1zZ19wdHIpOw0KKw0KKyAgICByZXR1cm4gWk9TU19TVUNDRVNTOw0KK30NCisjZWxpZiBkZWZpbmVkKF9VQl9VU0VfUE9PTCkNCitzdGF0aWMgaW5saW5lIFZPSUQgKm1lbV9nZXR1YihVSU5UMzIgc2l6ZSwgY29uc3QgQ0hBUiAqZmlsZSwgVUlOVDMyIGxpbmUpDQorew0KKyAgICByZXR1cm4gcG9vbF9hbGxvYyhzaXplLCBmaWxlLCBsaW5lKTsNCit9DQorc3RhdGljIGlubGluZSBVSU5UMzIgbWVtX3JldHViKFZPSUQgKm1zZ19wdHIsIGNvbnN0IENIQVIgKmZpbGUsIFVJTlQzMiBsaW5lKQ0KK3sNCisgICAgcG9vbF9mcmVlKG1zZ19wdHIsIGZpbGUsIGxpbmUpOw0KKyAgICByZXR1cm4gWk9TU19TVUNDRVNTOw0KK30NCisjZW5kaWYNCisNCisjZWxzZQ0KKw0KKyNpZiBkZWZpbmVkKF9VQl9VU0VfSEVBUCkNCitzdGF0aWMgaW5saW5lIFZPSUQgKm1lbV9nZXR1YihVSU5UMzIgc2l6ZSwgY29uc3QgQ0hBUiAqZmlsZSwgVUlOVDMyIGxpbmUpDQorew0KKyAgICByZXR1cm4gdG9zX2hlYXBfYWxsb2Moc2l6ZSwgZmlsZSwgbGluZSk7DQorfQ0KK3N0YXRpYyBpbmxpbmUgVUlOVDMyIG1lbV9yZXR1YihWT0lEICptc2dfcHRyLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSkNCit7DQorICAgIHRvc19oZWFwX2ZyZWUobXNnX3B0ciwgZmlsZSwgbGluZSk7DQorICAgIHJldHVybiBaT1NTX1NVQ0NFU1M7DQorfQ0KKyNlbGlmIGRlZmluZWQoX1VCX1VTRV9QT09MKQ0KK3N0YXRpYyBpbmxpbmUgVk9JRCAqbWVtX2dldHViKFVJTlQzMiBzaXplLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSkNCit7DQorICAgIHJldHVybiBwb29sX2FsbG9jKHNpemUsIGZpbGUsIGxpbmUpOw0KK30NCitzdGF0aWMgaW5saW5lIFVJTlQzMiBtZW1fcmV0dWIoVk9JRCAqbXNnX3B0ciwgY29uc3QgQ0hBUiAqZmlsZSwgVUlOVDMyIGxpbmUpDQorew0KKyAgICBwb29sX2ZyZWUobXNnX3B0ciwgZmlsZSwgbGluZSk7DQorICAgIHJldHVybiBaT1NTX1NVQ0NFU1M7DQorfQ0KKyNlbHNlDQorVk9JRCAqbWVtX2dldHViKFVJTlQzMiBzaXplLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSk7DQorVUlOVDMyIG1lbV9yZXR1YihWT0lEICptc2dfcHRyLCBjb25zdCBDSEFSICpmaWxlLCBVSU5UMzIgbGluZSk7DQorI2VuZGlmDQorDQorI2VuZGlmICAvLyAjaWZkZWYgX09TX0xJTlVYDQorDQorRkxPQVQgek9zc19HZXRVQkZyZWVSYXRlKFVJTlQzMiB1YlNpemUpOw0KK1ZPSUQgek9zc19NZW1MZWFrU3RhcnQoVUlOVDMyIGxlYWtfdGhyZWFkaG9sZCk7DQorVk9JRCB6T3NzX01lbUxlYWtFbmQoVk9JRCk7DQorVk9JRCB6T3NzX0NoZWNrTWVtKFZPSUQpOw0KK1ZPSUQgek9zc19TZXRVYkRiZ1N3aXRjaChVSU5UMzIgZGJnRmxhZyk7DQorQk9PTCB6T3NzX0dldE1lbUluaXRTdGF0ZShWT0lEKTsNCitVSU5UMzIgek9zc19HZXRTeXNNZW1JbmZvKFRfTWVtX01lbUluZm8gKm1lbV9pbmZvKTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMirvtax5MG/yfnD98f4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAgLyogX09TU19NRU1fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfbW9uaXRvci5oIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19tb25pdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxZGRmMQotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfbW9uaXRvci5oCkBAIC0wLDAgKzEsMzM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogsObIqMv509AgKEMpMjAxMiwg1tDQy82o0ba5ybfd09DP3rmry76how0KKyogDQorKiDOxLz+w/uzxjogICAgIG9zc19tb25pdG9yLmgNCisqIM7EvP6x6sq2OiAgICAgb3NzX21vbml0b3IuaA0KKyogxNrI3dWq0qo6ICAgICDWp7PFsuO84L/YxKO/6c23zsS8/qOsZWxlse3KvmVsZW1lbnQNCisqIMq508O3vbeoOiAgICAgI2luY2x1ZGUgIm9zc19tb25pdG9yLmgiDQorKiANCisqINDeuMTI1cbaICAgICAgICCw5rG+usUgICAgICDQ3rjEseq8xyAgICAgICAg0N64xMjLICAgICAgICAgINDeuMTE2sjdDQorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqIDIwMTIvMDkvMjAgICAgICBWMS4wICAgICAgICBDcmVhdGUgICAgICAgICAgwfXRx8TPICAgICAgICAgILS0vagNCisqIA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorI2lmbmRlZiBfT1NTX01PTklUT1JfSA0KKyNkZWZpbmUgX09TU19NT05JVE9SX0gNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM23zsS8/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgILrqtqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIE9TU19NT05fUEVSQ0VOVF9SQURJTyAgICAgICAgICAgMTAwICAgIA0KKw0KKy8qvOC/2NDFz6LX7rTz1rUqLw0KKyNkZWZpbmUgT1NTX01PTl9JTkZPX01BWF9OVU1CRVIgICAgICAgICAoMHg2NCkNCisNCisvKs/fs8zXtMysICovDQorI2RlZmluZSBPU1NfTU9OX1RIUkVBRF9SVU5OSU5HICAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgT1NTX01PTl9USFJFQURfUkVBRFkgICAgICAgICAgICAoMHgwMikNCisjZGVmaW5lIE9TU19NT05fVEhSRUFEX1dBSVRJTkcgICAgICAgICAgKDB4MDQpDQorDQorLyrIzs7x17TMrCAqLw0KKyNkZWZpbmUgT1NTX01PTl9UQVNLX1NUT1BQRUQgICAgICAgICAgICAoMHgwMSkNCisjZGVmaW5lIE9TU19NT05fVEFTS19JRExFICAgICAgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBPU1NfTU9OX1RBU0tfUkVBRFkgICAgICAgICAgICAgICgweDAzKQ0KKyNkZWZpbmUgT1NTX01PTl9UQVNLX1JVTiAgICAgICAgICAgICAgICAoMHgwNCkNCisNCisvKrzgv9jP37PMus1EU1K1xLnsvKMgKi8NCisjZGVmaW5lIE9TU19NT05fRVZFTlRfVEhSRUFEX1NXQVBJTiAgICAgKDB4MDApIA0KKyNkZWZpbmUgT1NTX01PTl9FVkVOVF9USFJFQURfU1dBUE9VVCAgICAoMHgwMSkNCisjZGVmaW5lIE9TU19NT05fRVZFTlRfRFNSX1NXQVBJTiAgICAgICAgKDB4MDIpDQorI2RlZmluZSBPU1NfTU9OX0VWRU5UX0RTUl9TV0FQT1VUICAgICAgICgweDAzKQ0KKw0KKy8qTU1VtcTK9NDUKi8NCisjZGVmaW5lIE9TU19NT05fTU1VX1BFUk1JU1NJT05fUlcgICAgICAgKDB4MDEpDQorI2RlZmluZSBPU1NfTU9OX01NVV9QRVJNSVNTSU9OX1JPICAgICAgICgweDAyKQ0KKyNkZWZpbmUgT1NTX01PTl9NTVVfQUNDRVNTX1dSSVRFQkFDSyAgICAoMHgwNCkNCisjZGVmaW5lIE9TU19NT05fTU1VX0FDQ0VTU19XUklURVRIUk9VR0ggKDB4MDgpDQorDQorLyq84L/Yv6q52LHq1r4qLw0KKyNkZWZpbmUgT1NTX01PTl9GTEFHX09GRiAgICAgICAgICAgICAgICAoMHgwKQ0KKyNkZWZpbmUgT1NTX01PTl9GTEFHX09OICAgICAgICAgICAgICAgICAoMHgxKQ0KKw0KKy8qz/vPorao0uXA4NDNKi8NCisjZGVmaW5lIE9TU19NT05fSU5WQUxJRCAgICAgICAgICAgICAgICAgKC0xKQ0KKyNkZWZpbmUgT1NTX01PTl9CQVNFICAgICAgICAgICAgICAgICAgICAoMHgwMCkNCisjZGVmaW5lIE9TU19NT05fVkVSU0lPTiAgICAgICAgICAgICAgICAgKE9TU19NT05fQkFTRSArIDApDQorI2RlZmluZSBPU1NfTU9OX0NQVV9GUkVRVUVOQ1kgICAgICAgICAgIChPU1NfTU9OX0JBU0UgKyAxKQ0KKyNkZWZpbmUgT1NTX01PTl9DUFVfTE9BRCAgICAgICAgICAgICAgICAoT1NTX01PTl9CQVNFICsgMikNCisjZGVmaW5lIE9TU19NT05fUE9PTCAgICAgICAgICAgICAgICAgICAgKE9TU19NT05fQkFTRSArIDMpDQorI2RlZmluZSBPU1NfTU9OX1BPT0xfQUxMT0MgICAgICAgICAgICAgIChPU1NfTU9OX0JBU0UgKyA0KQ0KKyNkZWZpbmUgT1NTX01PTl9QT09MX0xFQUsgICAgICAgICAgICAgICAoT1NTX01PTl9CQVNFICsgNSkNCisjZGVmaW5lIE9TU19NT05fSEVBUCAgICAgICAgICAgICAgICAgICAgKE9TU19NT05fQkFTRSArIDYpDQorI2RlZmluZSBPU1NfTU9OX1RIUkVBRCAgICAgICAgICAgICAgICAgIChPU1NfTU9OX0JBU0UgKyA3KQ0KKyNkZWZpbmUgT1NTX01PTl9UQVNLICAgICAgICAgICAgICAgICAgICAoT1NTX01PTl9CQVNFICsgOCkNCisjZGVmaW5lIE9TU19NT05fRVZFTlQgICAgICAgICAgICAgICAgICAgKE9TU19NT05fQkFTRSArIDkpDQorI2RlZmluZSBPU1NfTU9OX01TRyAgICAgICAgICAgICAgICAgICAgIChPU1NfTU9OX0JBU0UgKyAxMCkNCisjZGVmaW5lIE9TU19NT05fUkFNTE9HICAgICAgICAgICAgICAgICAgKE9TU19NT05fQkFTRSArIDExKQ0KKyNkZWZpbmUgT1NTX01PTl9HRVRfVkFSX1JFUSAgICAgICAgICAgICAoT1NTX01PTl9CQVNFICsgMTIpDQorI2RlZmluZSBPU1NfTU9OX0dFVF9WQVJfQUNLICAgICAgICAgICAgIChPU1NfTU9OX0JBU0UgKyAxMykNCisjZGVmaW5lIE9TU19NT05fU0VUX1ZBUiAgICAgICAgICAgICAgICAgKE9TU19NT05fQkFTRSArIDE0KQ0KKyNkZWZpbmUgT1NTX01PTl9USU1FUiAgICAgICAgICAgICAgICAgICAoT1NTX01PTl9CQVNFICsgMTUpDQorI2RlZmluZSBPU1NfTU9OX01NVSAgICAgICAgICAgICAgICAgICAgIChPU1NfTU9OX0JBU0UgKyAxNikNCisjZGVmaW5lIE9TU19NT05fU0VUX0ZMQUcgICAgICAgICAgICAgICAgKE9TU19NT05fQkFTRSArIDE3KQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyv2+3cDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qvOC/2LDmsb4qLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBjb25zdCBDSEFSICp2ZXJzaW9uOw0KK30gVF9aT3NzX01vbl9WZXJzaW9uOw0KKw0KKy8qY3B1ILXE1vfGtSovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQxNiAgZnJlcXVlbmN5Ow0KK30gVF9aT3NzX01vbl9DcHVfRnJlcXVlbmN5Ow0KKw0KKy8qY3B1ILi61NggKGxvYWQvMTAwKSovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQxNiAgbG9hZDsNCit9IFRfWk9zc19Nb25fQ3B1X0xvYWQ7DQorDQorLypwb29sIMXk1sPQxc+iKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBzaXplOw0KKyAgICBVSU5UMzIgIHRvdGFsOw0KKyAgICBVSU5UMzIgIHVzZWQ7DQorICAgIFVJTlQzMiAgbWF4X3VzZWQ7DQorfSBUX1pPc3NfTW9uX1Bvb2xfRWxlOw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBVSU5UMzIgIG51bTsNCisgICAgVF9aT3NzX01vbl9Qb29sX0VsZSAqZWxlOw0KK30gVF9aT3NzX01vbl9Qb29sOw0KKw0KKy8qcG9vbCBhbGxvYyDQxc+iKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICAgICAgYWRkcjsNCisgICAgVUlOVDMyICAgICAgb3duZXI7DQorICAgIFVJTlQzMiAgICAgIHRpbWVzdGFtcDsNCisgICAgY29uc3QgQ0hBUiAqZmlsZTsNCisgICAgVUlOVDMyICAgICAgbGluZTsNCit9IFRfWk9zc19Nb25fUG9vbF9BbGxvY19FbGU7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQzMiAgbnVtOw0KKyAgICBUX1pPc3NfTW9uX1Bvb2xfQWxsb2NfRWxlICplbGU7DQorfSBUX1pPc3NfTW9uX1Bvb2xfQWxsb2M7DQorDQorLypwb29sIGxlYWsg0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQzMiAgICAgIGFkZHI7DQorICAgIFVJTlQzMiAgICAgIG93bmVyOw0KKyAgICBVSU5UMzIgICAgICB0aW1lc3RhbXA7DQorICAgIGNvbnN0IENIQVIgICpmaWxlOw0KKyAgICBVSU5UMzIgICAgICBsaW5lOw0KK30gVF9aT3NzX01vbl9Qb29sX0xlYWtfRWxlOw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBVSU5UMzIgIG51bTsNCisgICAgVF9aT3NzX01vbl9Qb29sX0xlYWtfRWxlICplbGU7DQorfSBUX1pPc3NfTW9uX1Bvb2xfTGVhazsNCisNCisvKmhlYXAg0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQzMiAgYmFzZTsNCisgICAgVUlOVDMyICBzaXplOw0KKyAgICBVSU5UMzIgIHVzZWQ7DQorfSBUX1pPc3NfTW9uX0hlYXA7DQorDQorLyrP37PM0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIENIQVIgICAgKm5hbWU7DQorICAgIFVJTlQzMiAgaGFuZGxlOw0KKyAgICBVSU5UMzIgIG1zZ19udW07DQorICAgIFVJTlQ4ICAgc3RhdHVzOw0KKyAgICBVSU5UOCAgIHByaW9yaXR5Ow0KKyAgICBVSU5UMTYgIHN0YWNrX3VzZWQ7DQorICAgIFVJTlQxNiAgc3RhY2tfbWF4X3VzZWQ7DQorICAgIFVJTlQxNiAgY3B1X2xvYWQ7DQorfSBUX1pPc3NfTW9uX1RocmVhZF9FbGU7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVuc2lnbmVkIGludCBudW07DQorICAgIFRfWk9zc19Nb25fVGhyZWFkX0VsZSAqZWxlOw0KK30gVF9aT3NzX01vbl9UaHJlYWQ7DQorDQorLyrIzs7x0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIENIQVIgICAgKm5hbWU7DQorICAgIFVJTlQzMiAgaGFuZGxlOw0KKyAgICBVSU5UMzIgIHRocmVhZF9oYW5kbGU7DQorICAgIFVJTlQ4ICAgc3RhdHVzOw0KK30gVF9aT3NzX01vbl9UYXNrX0VsZTsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBudW07DQorICAgIFRfWk9zc19Nb25fVGFza19FbGUgKmVsZTsNCit9IFRfWk9zc19Nb25fVGFzazsNCisNCisvKs/fs8y6zdbQts+57Lyj0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQ4ICAgZXZlbnQ7DQorICAgIENIQVIgICAgKm5hbWU7DQorICAgIFVJTlQzMiAgaGFuZGxlOw0KKyAgICBVSU5UNjQgIHRpY2tzdGFtcDsNCit9IFRfWk9zc19Nb25fRXZlbnRfRWxlOw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBVSU5UMzIgIG51bTsNCisgICAgVF9aT3NzX01vbl9FdmVudF9FbGUgKmVsZTsNCit9IFRfWk9zc19Nb25fRXZlbnQ7DQorDQorLyrP+8+iytW3otDFz6IqLw0KK3R5cGVkZWYgc3RydWN0DQoreyAgIA0KKyAgICBVSU5UMzIgIG1zZ0lkOw0KKyAgICBVSU5UMzIgIHB0cjsNCisgICAgVUlOVDMyICBzaXplOw0KKyAgICBDSEFSICAgICpzZW5kZXI7DQorICAgIENIQVIgICAgKnJlY2VpdmVyOw0KKyAgICBVSU5UMzIgIHRpbWVzdGFtcDsNCit9IFRfWk9zc19Nb25fTXNnX0VsZTsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBudW07DQorICAgIFRfWk9zc19Nb25fTXNnX0VsZSAgKmVsZTsNCit9IFRfWk9zc19Nb25fTXNnOw0KKw0KKy8qcmFtbG9nINDFz6IqLw0KK3R5cGVkZWYgc3RydWN0DQoreyAgIA0KKyAgICBVSU5UMzIgIHNpemU7DQorICAgIGNvbnN0IENIQVIgKnJhbWxvZzsNCit9IFRfWk9zc19Nb25fUmFtbG9nOw0KKw0KKy8qu/HIobHkwb/H68fzKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBiYXNlOw0KKyAgICBVSU5UMzIgIHNpemU7DQorfSBUX1pPc3NfTW9uX0dldF9WYXJfUmVxOw0KKw0KKy8qu/HIobHkwb/It8jP0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQzMiAgc2l6ZTsNCisgICAgVUlOVDggICAqdmFsdWU7DQorfSBUX1pPc3NfTW9uX0dldF9WYXJfQWNrOw0KKw0KKy8qyejWw7Hkwb8qLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBVSU5UMzIgIGJhc2U7DQorICAgIFVJTlQzMiAgc2l6ZTsNCisgICAgVUlOVDggICAqdmFsdWU7DQorfSBUX1pPc3NfTW9uX1NldF9WYXI7DQorDQorLyq2qMqxxvfQxc+iKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBzdGFydF90aW1lOw0KKyAgICBVSU5UMzIgIGV4cGlyZV90aW1lOw0KKyAgICBVSU5UMzIgIGNhbGxiYWNrX2Z1bmM7DQorICAgIFVJTlQ4ICAgaXNfcGVyaW9kOw0KKyAgICBVSU5UMzIgIGhhbmRsZTsNCit9IFRfWk9zc19Nb25fVGltZXJfRWxlOw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBVSU5UMzIgIG51bTsNCisgICAgVF9aT3NzX01vbl9UaW1lcl9FbGUgKmVsZTsNCit9IFRfWk9zc19Nb25fVGltZXI7DQorDQorLypNTVUg0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIENIQVIgICAgKm5hbWU7DQorICAgIFVJTlQzMiAgdmlyX2FkZHI7DQorICAgIFVJTlQzMiAgcGh5X2FkZHI7DQorICAgIFVJTlQzMiAgc2l6ZTsNCisgICAgVUlOVDggICBhdHRyOyAvKiBwZXJtaXNzaW9uIGFuZCBhY2Nlc3MgKi8NCit9IFRfWk9zc19Nb25fTW11X0VsZTsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBudW07DQorICAgIFRfWk9zc19Nb25fTW11X0VsZSAqZWxlOw0KK30gVF9aT3NzX01vbl9NbXU7DQorDQorLypNUFUg0MXPoiovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIENIQVIgICAqbmFtZTsNCisgICAgVUlOVDMyIG51bTsNCisgICAgVUlOVDMyIGJhc2U7DQorICAgIFVJTlQzMiBzaXplOw0KKyAgICBVSU5UMzIgYXR0cjsNCisgICAgVUlOVDMyIHN1YlJlZ2lvbjsNCit9IFRfWk9zc19Nb25fTXB1X0VsZTsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBudW07DQorICAgIFRfWk9zc19Nb25fTXB1X0VsZSAqZWxlOw0KK30gVF9aT3NzX01vbl9NcHU7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFVJTlQzMiAgZmxhZzsNCit9IFRfWk9zc19Nb25fU2V0X0ZsYWc7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDIq77WseTBv8n5w/cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9VU0VfTU9OSVRPUg0KK2V4dGVybiBVSU5UMzIgICBnT3NhX01vbml0b3JGbGFnOw0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyKu+1rqvyv3J+cP3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qIFRPU7j619nEo7/pICovDQorVk9JRCB6VG9zX0dldE1tdUNvbmZpZ1RhYmxlKFRfWk9zc19Nb25fTW11ICpwTW9uTW11SW5mbyk7DQorVk9JRCBwb29sX3VzZWRfaW5mbyhUX1pPc3NfTW9uX1Bvb2wgKnBNb25Qb29sSW5mbyk7DQorVk9JRCBwb29sX2FsbG9jX2luZm8oVF9aT3NzX01vbl9Qb29sX0FsbG9jICpwTW9uUG9vbEFsbG9jSW5mbyk7DQorVk9JRCBwb29sX2xlYWtfaW5mbyhUX1pPc3NfTW9uX1Bvb2xfTGVhayAqcE1vblBvb2xMZWFrSW5mbyk7DQorVk9JRCB6MHNzX0dldE1zZ0luZm8oVF9aT3NzX01vbl9Nc2cgKnBNb25Nc2dJbmZvKTsNCitWT0lEIHowc3NfR2V0RXZlbnRJbmZvKFRfWk9zc19Nb25fRXZlbnQgKnBNb25FdmVudEluZm8pOw0KK1ZPSUQgek9zc19HZXRBbGxUYXNrSW5mbyhUX1pPc3NfTW9uX1Rhc2sgKnBNb25UYXNrSW5mbyk7DQorVk9JRCB6MHNzX0dldEFsbFRocmVhZEluZm8oVF9aT3NzX01vbl9UaHJlYWQgKnBNb25UaHJlYWRJbmZvKTsNCitWT0lEIHpPc3NfR2V0VGltZXJJbmZvKFRfWk9zc19Nb25fVGltZXIgKnBNb25UaW1lckluZm8pOw0KK1ZPSUQgejBzc19HZXRSYW1sb2dJbmZvKFRfWk9zc19Nb25fUmFtbG9nICpwTW9uUmFtbG9nSW5mbyk7DQorVk9JRCB6MHNzX0dldEhlYXBJbmZvKFRfWk9zc19Nb25fSGVhcCAqcE1vbkhlYXBJbmZvKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8vICNpZm5kZWYgX09TU19NT05JVE9SX0gNCisNCmRpZmYgLS1naXQgYS9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3Bvb2wuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfcG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjY5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3Bvb2wuaApAQCAtMCwwICsxLDEyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILDmyKjL+dPQIChDKTIwMTQsINbQ0MvNqNG2ucm33dPQz965q8u+oaMNCisqIA0KKyogzsS8/sP7s8Y6ICAgICBvc3NfcG9vbC5oDQorKiDOxLz+serKtjogICAgIG9zc19wb29sLmgNCisqIMTayN3VqtKqOiAgICAgb3Nz1qezxbLjxNq05rPYudzA7cSjv+nNt87EvP4NCisqIMq508O3vbeoOiAgICAgI2luY2x1ZGUgIm9zc19hcGkuaCINCisqIA0KKyog0N64xMjVxtogICAgICAgILDmsb66xSAgICAgINDeuMSx6rzHICAgICAgICDQ3rjEyMsgICAgICAgICAg0N64xMTayN0NCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyogMjAxNC8wOC8yNSAgICAgIFYxLjAgICAgICAgIENyZWF0ZSAgICAgICAgICDB9dHHxM8gICAgICAgICAgtLS9qA0KKyogDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaWZuZGVmIF9PU1NfUE9PTF9IDQorI2RlZmluZSBfT1NTX1BPT0xfSA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzbfOxLz+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAguuq2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZiBkZWZpbmVkKF9ERUJVRykgJiYgIWRlZmluZWQoX1VTRV9PU1NfTUlOKQ0KKyMgZGVmaW5lIFBPT0xfREVCVUcNCisjIGRlZmluZSBQT09MX0xFQUtfQ0hFQ0sNCisjIGRlZmluZSBQT09MX0lOSVRfQ0hFQ0sNCisjZW5kaWYNCisNCisjaWZkZWYgUE9PTF9ERUJVRw0KKyMgZGVmaW5lIHBhbGxvYyhzaXplKSAgICAgICAgICAgcG9vbF9hbGxvYyhzaXplLCBfX0ZJTEVfXywgX19MSU5FX18pDQorIyBkZWZpbmUgcGZyZWUocHRyKSAgICAgICAgICAgICBwb29sX2ZyZWUocHRyLCBfX0ZJTEVfXywgX19MSU5FX18pDQorIyBkZWZpbmUgcHJlYWxsb2MocHRyLCBzaXplKSAgICBwb29sX3JlYWxsb2MocHRyLCBzaXplLCBfX0ZJTEVfXywgX19MSU5FX18pDQorIyBkZWZpbmUgcHNpemUocHRyKSAgICAgICAgICAgICBwb29sX25vZGVfc2l6ZShwdHIsIF9fRklMRV9fLCBfX0xJTkVfXykNCisjZWxzZQ0KKyMgZGVmaW5lIHBhbGxvYyhzaXplKSAgICAgICAgICAgcG9vbF9hbGxvYyhzaXplLCBOVUxMLCAweDAwKQ0KKyMgZGVmaW5lIHBmcmVlKHB0cikgICAgICAgICAgICAgcG9vbF9mcmVlKHB0ciwgTlVMTCwgMHgwMCkNCisjIGRlZmluZSBwcmVhbGxvYyhwdHIsIHNpemUpICAgIHBvb2xfcmVhbGxvYyhwdHIsIHNpemUsIE5VTEwsIDB4MDApDQorIyBkZWZpbmUgcHNpemUocHRyKSAgICAgICAgICAgICBwb29sX25vZGVfc2l6ZShwdHIsIE5VTEwsIDB4MDApDQorI2VuZGlmDQorDQorI2RlZmluZSBQT09MX0lOREVYXzBfTlVNICAgICg0MDk2KSAgICAvKiB0aGUgbnVtYmVyIG9mIGluZGV4IDAgcG9vbCBub2RlICAqLw0KKyNkZWZpbmUgUE9PTF9JTkRFWF8wX1NJWkUgICAoNCkgICAgICAgLyogdGhlIHNpemUgb2YgaW5kZXggMCBwb29sIG5vZGUgICAgKi8NCisNCisjZGVmaW5lIFBPT0xfSU5ERVhfMV9OVU0gICAgKDQwOTYpICAgIC8qIHRoZSBudW1iZXIgb2YgaW5kZXggMSBwb29sIG5vZGUgICovDQorI2RlZmluZSBQT09MX0lOREVYXzFfU0laRSAgICg4KSAgICAgICAvKiB0aGUgc2l6ZSBvZiBpbmRleCAxIHBvb2wgbm9kZSAgICAqLw0KKw0KKyNkZWZpbmUgUE9PTF9JTkRFWF8yX05VTSAgICAoMjU2KSAgICAgLyogdGhlIG51bWJlciBvZiBpbmRleCAyIHBvb2wgbm9kZSAgKi8NCisjZGVmaW5lIFBPT0xfSU5ERVhfMl9TSVpFICAgKDE2KSAgICAgIC8qIHRoZSBzaXplIG9mIGluZGV4IDIgcG9vbCBub2RlICAgICovDQorDQorI2RlZmluZSBQT09MX0lOREVYXzNfTlVNICAgICgyMDQ4KSAgICAvKiB0aGUgbnVtYmVyIG9mIGluZGV4IDMgcG9vbCBub2RlICAqLw0KKyNkZWZpbmUgUE9PTF9JTkRFWF8zX1NJWkUgICAoMzIpICAgICAgLyogdGhlIHNpemUgb2YgaW5kZXggMyBwb29sIG5vZGUgICAgKi8NCisNCisjZGVmaW5lIFBPT0xfSU5ERVhfNF9OVU0gICAgKDMwNzIpICAgIC8qIHRoZSBudW1iZXIgb2YgaW5kZXggNCBwb29sIG5vZGUgICovDQorI2RlZmluZSBQT09MX0lOREVYXzRfU0laRSAgICg2NCkgICAgICAvKiB0aGUgc2l6ZSBvZiBpbmRleCA0IHBvb2wgbm9kZSAgICAqLw0KKw0KKyNkZWZpbmUgUE9PTF9JTkRFWF81X05VTSAgICAoNTEyKSAgICAgLyogdGhlIG51bWJlciBvZiBpbmRleCA1IHBvb2wgbm9kZSAgKi8NCisjZGVmaW5lIFBPT0xfSU5ERVhfNV9TSVpFICAgKDEyOCkgICAgIC8qIHRoZSBzaXplIG9mIGluZGV4IDUgcG9vbCBub2RlICAgICovDQorDQorI2RlZmluZSBQT09MX0lOREVYXzZfTlVNICAgICg1MTIpICAgICAvKiB0aGUgbnVtYmVyIG9mIGluZGV4IDYgcG9vbCBub2RlICAqLw0KKyNkZWZpbmUgUE9PTF9JTkRFWF82X1NJWkUgICAoMjU2KSAgICAgLyogdGhlIHNpemUgb2YgaW5kZXggNiBwb29sIG5vZGUgICAgKi8NCisNCisjZGVmaW5lIFBPT0xfSU5ERVhfN19OVU0gICAgKDMwMCkgICAgIC8qIHRoZSBudW1iZXIgb2YgaW5kZXggNyBwb29sIG5vZGUgICovDQorI2RlZmluZSBQT09MX0lOREVYXzdfU0laRSAgICg1MTIpICAgICAvKiB0aGUgc2l6ZSBvZiBpbmRleCA3IHBvb2wgbm9kZSAgICAqLw0KKw0KKyNkZWZpbmUgUE9PTF9JTkRFWF84X05VTSAgICAoMzAwKSAgICAgLyogdGhlIG51bWJlciBvZiBpbmRleCA4IHBvb2wgbm9kZSAgKi8NCisjZGVmaW5lIFBPT0xfSU5ERVhfOF9TSVpFICAgKDEwMjQpICAgIC8qIHRoZSBzaXplIG9mIGluZGV4IDggcG9vbCBub2RlICAgICovDQorDQorI2RlZmluZSBQT09MX0lOREVYXzlfTlVNICAgICgxMDApICAgICAvKiB0aGUgbnVtYmVyIG9mIGluZGV4IDkgcG9vbCBub2RlICAqLw0KKyNkZWZpbmUgUE9PTF9JTkRFWF85X1NJWkUgICAoMjA0OCkgICAgLyogdGhlIHNpemUgb2YgaW5kZXggOSBwb29sIG5vZGUgICAgKi8NCisNCisjZGVmaW5lIFBPT0xfSU5ERVhfMTBfTlVNICAgKDIxKSAgICAgIC8qIHRoZSBudW1iZXIgb2YgaW5kZXggMTAgcG9vbCBub2RlICovDQorI2RlZmluZSBQT09MX0lOREVYXzEwX1NJWkUgICg0MDk2KSAgICAvKiB0aGUgc2l6ZSBvZiBpbmRleCAxMCBwb29sIG5vZGUgICAqLw0KKw0KKyNkZWZpbmUgUE9PTF9JTkRFWF8xMV9OVU0gICAoNjApICAgICAgLyogdGhlIG51bWJlciBvZiBpbmRleCAxMSBwb29sIG5vZGUgKi8NCisjZGVmaW5lIFBPT0xfSU5ERVhfMTFfU0laRSAgKDgxOTIpICAgIC8qIHRoZSBzaXplIG9mIGluZGV4IDExIHBvb2wgbm9kZSAgICovDQorDQorI2RlZmluZSBQT09MX0lOREVYXzEyX05VTSAgICgxNSkgICAgICAvKiB0aGUgbnVtYmVyIG9mIGluZGV4IDEyIHBvb2wgbm9kZSAqLw0KKyNkZWZpbmUgUE9PTF9JTkRFWF8xMl9TSVpFICAoMTYzODQpICAgLyogdGhlIHNpemUgb2YgaW5kZXggMTIgcG9vbCBub2RlICAgKi8NCisNCisjZGVmaW5lIFBPT0xfSU5ERVhfMTNfTlVNICAgKDUpICAgICAgIC8qIHRoZSBudW1iZXIgb2YgaW5kZXggMTMgcG9vbCBub2RlICovDQorI2RlZmluZSBQT09MX0lOREVYXzEzX1NJWkUgICgzMjc2OCkgICAvKiB0aGUgc2l6ZSBvZiBpbmRleCAxMyBwb29sIG5vZGUgICAqLw0KKw0KKyNkZWZpbmUgUE9PTF9JTkRFWF8xNF9OVU0gICAoNSkgICAgICAgLyogdGhlIG51bWJlciBvZiBpbmRleCAxNCBwb29sIG5vZGUgKi8NCisjZGVmaW5lIFBPT0xfSU5ERVhfMTRfU0laRSAgKDY1NTM2KSAgIC8qIHRoZSBzaXplIG9mIGluZGV4IDE0IHBvb2wgbm9kZSAgICovDQorDQorI2RlZmluZSBQT09MX0lOREVYXzE1X05VTSAgICgxKSAgICAgICAvKiB0aGUgbnVtYmVyIG9mIGluZGV4IDE1IHBvb2wgbm9kZSAqLw0KKyNkZWZpbmUgUE9PTF9JTkRFWF8xNV9TSVpFICAoMTMxMDcyKSAgLyogdGhlIHNpemUgb2YgaW5kZXggMTUgcG9vbCBub2RlICAgKi8NCisNCisjZGVmaW5lIFBPT0xfTEVBS19DSEVDS19USU1FT1VUICAgICAoMTAwKQ0KKw0KKyNkZWZpbmUgUE9PTF9BTExPQ19TVEFUSVNUSUNfTlVNICAgICg4KQ0KKw0KKyNkZWZpbmUgUE9PTF9NQk9YX0lURU1fQ09VTlQgICAgICAgICgzMDAwKSAgLyogdGhlIHRvdGFsIGF2YWlsYWJsZSBpdGVtcyhtc2dzKSBmb3Igc3lzdGVtICovDQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDK/b7dwODQzbao0uUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDIq77WseTBv8n5w/cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDIq77Wuq/K/cn5w/cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBwb29sX2luaXQodm9pZCk7DQorX190Y21fY2FsbF9mdW5jIHZvaWQgKnBvb2xfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpmaWxlLCB1bnNpZ25lZCBsb25nIGxpbmUpOw0KK19fdGNtX2NhbGxfZnVuYyB2b2lkIHBvb2xfZnJlZSh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGluZSk7DQordm9pZCAqcG9vbF9yZWFsbG9jKHZvaWQgKm9sZF9wdHIsIHVuc2lnbmVkIGxvbmcgbmV3X3NpemUsIGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGluZSk7DQordW5zaWduZWQgbG9uZyBwb29sX25vZGVfc2l6ZSh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGluZSk7DQordm9pZCBwb29sX3ByaW50X2xlYWsodW5zaWduZWQgbG9uZyB0aW1lb3V0KTsNCit2b2lkIHBvb2xfcHJpbnRfYWxsb2NfZmFpbCh2b2lkKTsNCit2b2lkIHBvb2xfcHJpbnRfYWxsb2Nfc3RhdGlzdGljKHZvaWQpOw0KK3ZvaWQgcG9vbF9wcmludF9mcmVlKHZvaWQpOw0KK3ZvaWQgcG9vbF90cmFjZV9sZWFrX3N0YXJ0KHZvaWQpOw0KK3ZvaWQgcG9vbF90cmFjZV9sZWFrX2VuZCh1bnNpZ25lZCBsb25nIHRpbWVvdXQpOw0KKw0KKyNlbmRpZiAgLy8gI2lmbmRlZiBfT1NTX1BPT0xfSA0KKw0KZGlmZiAtLWdpdCBhL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfcG9zaXguaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfcG9zaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWZmYWNiCi0tLSAvZGV2L251bGwKKysrIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19wb3NpeC5oCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAxMiBaVEUgQ29ycG9yYXRpb24uDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogxKMgv+kgw/sgOiBQOThDX09TUw0KKyogzsQgvP4gw/sgOiBvc3NfcG9zaXguaA0KKyogz+C52M7EvP4gOiANCisqIMq1z9a5psTcIDogcG9zaXi/4s23zsS8/g0KKyog1/cgICAg1d8gOiBjaGVueGluZ2ZhbmcNCisqILDmICAgILG+IDogVjEuMA0KKyogzeqzycjVxtogOiAyMDEyLTA4LTEwIA0KKyogxuTL/Mu1w/cgOiANCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqINDeuMS8x8K8DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmbmRlZiBfT1NTX1BPU0lYX0gNCisjZGVmaW5lIF9PU1NfUE9TSVhfSA0KKw0KKyNkZWZpbmUgX1VTRV9QT1NJWA0KKyNpZmRlZiBfVVNFX1BPU0lYDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAjaW5jbHVkZcf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9PU19UT1MNCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4NCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQorI2VsaWYgZGVmaW5lZCAoX09TX0xJTlVYKQ0KKw0KKyNlbHNlDQorI2luY2x1ZGUgInN5cy90eXBlcy5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyINCit7DQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiCzo8G/tqjS5cf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDK/b7dveG5ubao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qIMqxvOS2qNLlICovDQorI2lmbmRlZiBfT1NfV0lODQordHlwZWRlZiBzdHJ1Y3QgdGltZXZhbCAgWk9TU19TX1RJTUVWQUw7DQordHlwZWRlZiBzdHJ1Y3QgdGltZXpvbmUgWk9TU19TX1RJTUVaT05FOw0KK3R5cGVkZWYgc3RydWN0IHRpbWVzcGVjIFpPU1NfU19USU1FU1BFQzsNCisjZWxzZQ0KKyMgaWZuZGVmIF9VU0VfT1NfU09DSw0KK3R5cGVkZWYgc3RydWN0IHRpbWV2YWwNCisjIGVsc2UNCit0eXBlZGVmIHN0cnVjdA0KKyMgZW5kaWYNCit7DQorICAgIFNJTlQzMiAgdHZfc2VjOyAgICAgICAgDQorICAgIFNJTlQzMiAgdHZfdXNlYzsgICAgIA0KK31aT1NTX1NfVElNRVZBTDsNCisNCit0eXBlZGVmIHN0cnVjdCB0aW1lem9uZQ0KK3sNCisgICAgU0lOVDMyICB0el9taW51dGVzd2VzdDsgLyogIG1pbnV0ZXMgd2VzdCBvZiBHcmVlbndpY2gsus1HcmVlbndpY2ggyrG85LLuwcu24MnZt9bW0yAgKi8NCisgICAgU0lOVDMyICB0el9kc3R0aW1lOyAgICAgLyogIHR5cGUgb2YgZHN0IGNvcnJlY3Rpb24gdG8gYXBwbHkgLMjVueK92tS8yrG85LXE17TMrMv5tPqx7bXE17TMrMjnz8INCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTVF9OT05FICAgILK7yrnTww0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX1VTQSAgICAgw8C5+g0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX0FVU1QgICAgsMTW3g0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX1dFVCAgICAgzvfFtw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX01FVCAgICAg1tDFtw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX0VFVCAgICAgtqvFtw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX0NBTiAgICAgvNPEw7TzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1RfR0IgICAgICC087K7wdC13w0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX1JVTSAgICAgwt7C7cTh0ccNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTVF9UVVIgICAgIM3BtvrG5A0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNUX0FVU1RBTFQgsMTW3igxOTg2xOrS1LrzKSAgICAqLw0KK31aT1NTX1NfVElNRVpPTkU7DQorDQordHlwZWRlZiBzdHJ1Y3QgdGltZXNwZWMgDQorew0KKyAgICBTSU5UMzIgIHR2X3NlYzsNCisgICAgU0lOVDMyICB0dl9uc2VjOw0KK31aT1NTX1NfVElNRVNQRUM7DQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiC6r8r9yfnD98f4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorVUlOVDMyIHpPc3NfR2V0dGltZW9mZGF5KFpPU1NfU19USU1FVkFMICp0diwgWk9TU19TX1RJTUVaT05FICp0eik7DQorVUlOVDMyIHpPc3NfU2V0dGltZW9mZGF5KFpPU1NfU19USU1FVkFMICp0diwgWk9TU19TX1RJTUVaT05FICp0eik7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDIq77WseTBv8n5w/fH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgIC8qIF9VU0VfUE9TSVggICAqLw0KKw0KKyNlbmRpZiAgLyogX09TU19QT1NJWF9IICovDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19wc20uaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfcHNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyN2Y0NgotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfcHNtLmgKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTIgWlRFIENvcnBvcmF0aW9uLg0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMSjIL/pIMP7IDogUDk4Q19PU1MNCisqIM7EILz+IMP7IDogb3NzX3BzbS5oDQorKiDP4LnYzsS8/iA6IA0KKyogyrXP1rmmxNwgOiDKobXnudzA7cSjv+kNCisqINf3ICAgINXfIDogY2hlbnhpbmdmYW5nDQorKiCw5iAgICCxviA6IFYxLjANCisqIM3qs8nI1cbaIDogMjAxMi0wOC0xMA0KKyogxuTL/Mu1w/cgOiANCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqINDeuMS8x8K8DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorICAgICAgIA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogI2luY2x1ZGXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZmRlZiBfVVNFX1BTTV9ORVdfRlJBTUVXT1JLDQorI2luY2x1ZGUgIm9zc19wc21fbmV3X2ZyYW1ld29yay5oIiAgICAgICAvKjc1MTC689D4zbfOxLz+ICAgICAgKi8NCisjZWxzZQ0KKyNpbmNsdWRlICJvc3NfcHNtX29sZF9mcmFtZXdvcmsuaCIgICAgICAgLyrS1MewsOaxvrXEzbfOxLz+ICAgICovDQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiCzo8G/tqjS5cf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDK/b7dveG5ubao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cn5w/fH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyKu+1rHkwb/J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisNCmRpZmYgLS1naXQgYS9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3BzbV9uZXdfZnJhbWV3b3JrLmggYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3BzbV9uZXdfZnJhbWV3b3JrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliOThmYwotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfcHNtX25ld19mcmFtZXdvcmsuaApAQCAtMCwwICsxLDEyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTIgWlRFIENvcnBvcmF0aW9uLg0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMSjIL/pIMP7IDogUDk4Q19PU1MNCisqIM7EILz+IMP7IDogb3NzX3BzbS5oDQorKiDP4LnYzsS8/iA6IA0KKyogyrXP1rmmxNwgOiDKobXnudzA7cSjv+kNCisqINf3ICAgINXfIDogY2hlbnhpbmdmYW5nDQorKiCw5iAgICCxviA6IFYxLjANCisqIM3qs8nI1cbaIDogMjAxMi0wOC0xMA0KKyogxuTL/Mu1w/cgOiANCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqINDeuMS8x8K8DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmbmRlZiBfT1NTX1BTTV9IDQorI2RlZmluZSBfT1NTX1BTTV9IDQorICAgICAgIA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogI2luY2x1ZGXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyINCit7DQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiCzo8G/tqjS5cf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDK/b7dveG5ubao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3R5cGVkZWYgVk9JRCAqWk9TU19DT01QRU5TQVRFX0lEOyAgICAgICAgICAgICAgICAgICAgICAgLyogy6/D37K5s6VJRCAgICAgICAgICAgKi8NCit0eXBlZGVmIFZPSUQgKCpwc21fU2xlZXBJbml0SG9vaykoVk9JRCk7ICAgICAgICAgICAgICAgIC8qIMuvw9+z9cq8u69ob29rICAgICAgICovDQordHlwZWRlZiBWT0lEICgqcHNtX1NsZWVwRmluaXNoSG9vaykoVk9JRCk7ICAgICAgICAgICAgICAvKiDLr8PfveHK+Ghvb2sgICAgICAgICAqLw0KK3R5cGVkZWYgVk9JRCAoKnBzbV9TbGVlcEJlZm9yZUhvb2spKFZPSUQpOyAgICAgICAgICAgICAgLyogy6/D38ewaG9vayAgICAgICAgICAgKi8NCit0eXBlZGVmIFZPSUQgKCpwc21fU2xlZXBBZnRlckhvb2spKFZPSUQpOyAgICAgICAgICAgICAgIC8qIMuvw9+682hvb2sgICAgICAgICAgICovDQordHlwZWRlZiBWT0lEICgqcHNtX0NvbXBlbnNhdGVIb29rKShVSU5UMzIgc2xlZXBUaW1lKTsgICAvKiDLr8PfyrG85LK5s6W5s9fTuq/K/SAqLw0KKw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgUFNNX0JPT1RfREVGQVVMVCwgICAvKiDG9Lavs/XKvNa1ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgUFNNX1NZU0lOSVRfRklOSVNILCAvKiDPtc2zs/XKvLuvzeqzySzI59DNusW7+s3qs8lTeXNFbnRyeSAgKi8NCisgICAgUFNNX0JPT1RfRklOSVNIICAgICAvKiC/qrv6zeqzyaOsyOfQzbrFu/qz9s/WtP27+r3nw+YgICAgICAgKi8NCit9VF96UHNtX0Jvb3RTdGFnZTsgIC8qIMb0tq+917bOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKw0KKyNpZmRlZiBfVVNFX0NQVV9ERk0NCit0eXBlZGVmIHN0cnVjdCAgDQorew0KKyAgICBVSU5UMzIgIGNwdUNsazsNCisgICAgQk9PTCAgICBpc1VzZWQ7DQorfVRfelBzbV9DcHVGcmVxOyAgICAgICAgICAgICAgICAgICAgLyogwaK8tLX3xrW94bm5ICAgICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0ICANCit7DQorICAgIFVJTlQzMiAgcHVsbENwdVBlcmNlbnQ7DQorICAgIFVJTlQzMiAgdXBDcHVQZXJjZW50Ow0KKyAgICBVSU5UMzIgIGRvd25DcHVQZXJjZW50Ow0KK31UX3pQc21fQ3B1UGVyY2VudFRocmVzaG9sZDsgICAgLyogQ1BVtffGtben1rW94bm5ICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgVUlOVDMyICBjdXJDcHVGcmVxOw0KKyAgICBVSU5UMzIgIGRvd25DcHVGcmVxOyANCisgICAgVUlOVDMyICB1cENwdUZyZXE7DQorICAgIFVJTlQzMiAgcHVsbENwdUZyZXE7DQorfVRfelBzbV9DcHVGbTsgICAgICAgICAgICAgICAgICAgICAgLyogQ1BVtffGtb3hubkgICAgICAqLw0KKyNlbmRpZg0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sgDQorICAgIFVJTlQzMiAgICAgICAgICBkZWVwU2xlZXBUaW1lVGhyZXNob2xkOyAvKiDPtc2zye7Lr8PftcS3p9a1ICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBzaGFkb3dTbGVlcFRpbWVUaHJlc2hvbGQ7ICAgICAgICANCisjaWZkZWYgX1VTRV9DUFVfREZNDQorICAgIFVJTlQzMiAgICAgICAgICBkZm1QZXJpb2Q7ICAgICAgICAgICAgICAvKiC198a1tcTW3Mbao6y9qNLp1tzG2tTaNW1z0tTJzyovDQorICAgIFVJTlQzMiAgICAgICAgICBkZm1UaHJkUHJpOyAgICAgICAgICAgICAvKiC198a1tcTTxc/IvLYgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBkZm1DbnQ7ICAgICAgICAgICAgICAgICAvKiC198a1tcS0zsr9ICAgICAgICAgICAgICAgICAgICovDQorICAgIFRfelBzbV9DcHVGbSAgICAqZGVzQ2xrOyAgICAgICAgICAgICAgICAvKiDOtLLldXNiyejWw2NwdbX3xrUgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBkZXNDbGtOdW07ICAgICAgICAgICAgICAvKiDOtLLldXNiyejWw2NwdbX3xrW1xLj2yv0gICAgICovDQorICAgIFRfelBzbV9DcHVGbSAgICAqdXNiRGVzQ2xrOyAgICAgICAgICAgICAvKiCy5cnPdXNiyejWw2NwdbX3xrUgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICB1c2JEZXNDbGtOdW07ICAgICAgICAgICAvKiCy5cnPdXNiyejWw2NwdbX3xrW1xLj2yv0gICAgICovDQorICAgIFRfelBzbV9DcHVGcmVxICAqbWluQ2xrOyAgICAgICAgICAgICAgICAvKiDBory0tffGtSAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFRfelBzbV9DcHVQZXJjZW50VGhyZXNob2xkIHNjYWxlQ3B1UGNudDsvKiBjcHW198a1tcS3p9a1ICAgICAgICAgICAgICAgICovDQorICAgIENIQVIgICAgICAgICAgICAqKnBJZ25vcmVUaHJlYWROYW1lQXJyeTsvKiC69sLUz9+zzLXEw/vX1sr91+kgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBpZ25vcmVUaHJlYWRDbnQ7ICAgICAgICAvKiC69sLUz9+zzLXEuPbK/SAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAqdXNiU3lzQ2xrOyAgICAgICAgICAgICAvKiCy5cnPdXNiyrGjrM+1zbPWp7PWtcTW98a1ICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICB1c2JTeXNDbGtOdW07ICAgICAgICAgICAvKiCy5cnPdXNiyrGjrM+1zbPWp7PWtcTW98a1uPbK/SovDQorICAgIFVJTlQzMiAgICAgICAgICAqc3lzQ2xrOyAgICAgICAgICAgICAgICAvKiDOtLLldXNiyrGjrM+1zbPWp7PWtcTW98a1ICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBzeXNDbGtOdW07ICAgICAgICAgICAgICAvKiDOtLLldXNiyrGjrM+1zbPWp7PWtcTW98a1uPbK/SovDQorI2VuZGlmDQorICAgIFVJTlQzMiAgICAgICAgICBjaGFyZ2VyaW5nU2xlZXBUaW1lOyAgICAvKiCz5LXn1tDLr8PfyrG85KOstaXOu21zICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBhaXJQbGFuZVNsZWVwVGltZTsgICAgICAvKiC3ydDQxKPKvc/CtcTLr8PfyrG85KOstaXOu21zICovDQorICAgIFVJTlQzMiAgICAgICAgICBib290T3ZlckNsazsgICAgICAgICAgICAvKiBib290IHNsZWVwIL3hyvi687XEv6q7+tb3xrUgICovDQorfVRfelBzbV9QYXJhbTsgIC8qIMqhtefF5NbDss7K/b3hubnM5SAgICAgICAgICAgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiC6r8r9yfnD98f4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorVUlOVDMyIHpPc3NfUHNtSW5pdChWT0lEKTsNCitWT0lEICAgek9zc19TZXRCb290U3RhZ2UoVF96UHNtX0Jvb3RTdGFnZSBzdGFnZSk7DQorVUlOVDMyIHpPc3NfU2V0UFNNQXBwSWRsZShVSU5UMzIgYXBwSWQpOw0KK1VJTlQzMiB6T3NzX1NldFBTTUFwcEFjdGl2ZShVSU5UMzIgYXBwSWQpOw0KK1VJTlQzMiB6T3NzX0FwcGx5Q3B1RnJlcShVSU5UMzIgYXBwSWQsIEJPT0wgaXNVc2VkKTsNCitWT0lEICAgek9zc19TZXRTbGVlcEhvb2tPcHQocHNtX1NsZWVwSW5pdEhvb2sgIGluaXRIb29rLCBwc21fU2xlZXBGaW5pc2hIb29rICBmaW5pc2hIb29rLCBwc21fU2xlZXBCZWZvcmVIb29rICBiZWZvcmVIb29rLCBwc21fU2xlZXBBZnRlckhvb2sgYWZ0ZXJIb29rKTsNCitaT1NTX0NPTVBFTlNBVEVfSUQgek9zc19SZWdTbGVlcENvbXBlbnNhdGVGdW5jKHBzbV9Db21wZW5zYXRlSG9vayBmdW5jT3B0KTsNCitWT0lEICAgek9zc19EZXJlZ1NsZWVwQ29tcGVuc2F0ZUZ1bmMoWk9TU19DT01QRU5TQVRFX0lEIHBzbUNtcG5zdElkKTsNCitWT0lEICAgek9zc19TZXRJZ25vcmVUaHJlYWRUaW1lUmF0ZShGTE9BVCB0aW1lUmF0ZSk7DQorVk9JRCAgIHpPc3NfRGZtU2V0dGluZ0luaXQoVk9JRCk7DQorVk9JRCAgIHpPc3NfU2V0SWdub3JlVGhyZWFkKFpPU1NfVEhSRUFEX0lEIHRocmVhZElkKTsNCitWT0lEICAgek9zc19Qc21UcmFjZUluZm8oVk9JRCk7DQorVk9JRCAgIHpPc3NfRGZtVHJhY2VJbmZvKFZPSUQpOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyKu+1rHkwb/J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBfT1NTX1BTTV9IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19wc21fb2xkX2ZyYW1ld29yay5oIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19wc21fb2xkX2ZyYW1ld29yay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiODgwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3BzbV9vbGRfZnJhbWV3b3JrLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEyIFpURSBDb3Jwb3JhdGlvbi4NCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDEoyC/6SDD+yA6IFA5OENfT1NTDQorKiDOxCC8/iDD+yA6IG9zc19wc20uaA0KKyogz+C52M7EvP4gOiANCisqIMq1z9a5psTcIDogyqG157ncwO3Eo7/pDQorKiDX9yAgICDV3yA6IGNoZW54aW5nZmFuZw0KKyogsOYgICAgsb4gOiBWMS4wDQorKiDN6rPJyNXG2iA6IDIwMTItMDgtMTANCisqIMbky/zLtcP3IDogDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDQ3rjEvMfCvA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZm5kZWYgX09TU19QU01fSA0KKyNkZWZpbmUgX09TU19QU01fSA0KKyAgICAgICANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICNpbmNsdWRlx/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiDQorew0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogs6PBv7ao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyv2+3b3hubm2qNLlx/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit0eXBlZGVmIFZPSUQgKCpQU01fU2xlZXBGdW5jKShTSU5UMzIgYXJnKTsgIC8qIMqhtee53MDty6/D37qvyv3A4NDNICAgICAqLw0KK3R5cGVkZWYgVk9JRCAoKlBTTV9TbGVlcEhvb2tGdW5jKShWT0lEKTsgICAgLyogyqG157ncwO3Lr8PfSE9PS7qvyv3A4NDNICovIA0KKw0KK3R5cGVkZWYgZW51bSANCit7DQorICAgIFBTTV9NT0RVTEVfQVBQID0gMSwgICAgIC8qIMnPsuPTptPDICAgICAgICAgICAgICovDQorICAgIFBTTV9NT0RVTEVfUFMsICAgICAgICAgIC8qINCt0unVuyAgICAgICAgICAgICAgICovDQorICAgIFBTTV9NT0RVTEVfRFJWICAgICAgICAgIC8qIM/CsuPH/bavICAgICAgICAgICAgICovDQorfVRfUFNNX0lkbGVNb2R1bGU7ICAgICAgICAgIC8qIMqhtee53MDty/m7rrfWtcTEo7/pICovICAgICAgIA0KKw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgUFNNX05PX1NMRUVQLA0KKyAgICBQU01fS0VORUxfU0xFRVAsDQorICAgIFBTTV9TSEFMTE9XX1NMRUVQLA0KKyAgICBQU01fREVFUF9TTEVFUCwNCisgICAgUFNNX0JPT1RJTkdfU0xFRVAsICAgICAgLyogv6q7+srkyOtQSU7C66Giyta7+sPcwuvKobXny6/D3yAgKi8NCisgICAgUFNNX0xPU1NDT1ZFUkFHRV9TTEVFUCwgLyogtqrKp7iyuMfKobXny6/D3yAgICAgICAgICAgICAgICAgKi8NCisgICAgUFNNX0FJUlBMQU5FX1NMRUVQLCAgICAgLyogt8nQ0MSjyr3KobXny6/D3yAgICAgICAgICAgICAgICAgKi8NCisgICAgUFNNX0NIQVJHRVJJTkdfU0xFRVAsICAgLyogs+S157+qu/rKobXny6/D3yAgICAgICAgICAgICAgICAgKi8NCisgICAgUFNNX01BWF9TTEVFUA0KK31UX1BzbV9TbGVlcE1vZGU7ICAgICAgICAgICAvKiDLr8PfxKPKvSAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgUFNNX0JPT1RfREVGQVVMVCwgICAgICAgLyogxvS2r7P1yrzWtSAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFBTTV9TWVNJTklUX0ZJTklTSCwgICAgIC8qIM+1zbOz9cq8u6/N6rPJLMjn0M26xbv6zeqzyVN5c0VudHJ5ICAqLw0KKyAgICBQU01fQk9PVF9GSU5JU0ggICAgICAgICAvKiC/qrv6zeqzyaOsyOfQzbrFu/qz9s/WtP27+r3nw+YgICAgICAgKi8NCit9VF9Qc21fQm9vdFN0YWdlOyAgICAgICAgICAgLyogxvS2r73Xts4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorDQorI2lmZGVmIF9VU0VfQVBQRkxBR19ERk0NCit0eXBlZGVmIHN0cnVjdCAgDQorew0KKyAgICBVSU5UMzIgIFBTTV9BcHBQb3dGbGFnOw0KKyAgICBVSU5UMzIgIFBTTV9BcHBQb3c7DQorfVRfWk9zc19QU01fQXBwUG93OyAgICAgICAgIC8qINOm08Ox6ta+zru198a1veG5uSAqLw0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfVVNFX0NQVV9ERk0NCit0eXBlZGVmIHN0cnVjdCAgDQorew0KKyAgICBVSU5UMzIgIENQVUNMSzsNCisgICAgQk9PTCAgICBpc1VzZWQ7DQorfVRfWk9TU19DUFVfQ2xvY2s7ICAgICAgICAgIC8qIMGivLS198a1veG5uSAqLw0KKw0KK3R5cGVkZWYgc3RydWN0ICANCit7DQorICAgIFVJTlQzMiAgcHVsbENwdVBlcmNlbnQ7DQorICAgIFVJTlQzMiAgdXBDcHVQZXJjZW50Ow0KKyAgICBVSU5UMzIgIGRvd25DcHVQZXJjZW50Ow0KK31BUk1TY2FsZUNwdTsgICAgICAgICAgICAgICAvKiBDUFW198a1t6fWtb3hubkgKi8NCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIENIQVIgKnRocmVhZG5hbWU7DQorfVBTTV9JZ25vcmVUaHJlYWQ7ICAgICAgICAgIC8qILr2wtTP37PMveG5uSAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgVUlOVDMyICBjdXJyZW50QVJNQ2xvY2s7DQorICAgIFVJTlQzMiAgZG93bkFSTUNMb2NrOw0KKyAgICBVSU5UMzIgIHVwQVJNQ2xvY2s7DQorICAgIFVJTlQzMiAgcHVzaEFSTUNsb2NrOw0KK31UX1pQU01fQVJNQ2xvY2tTZXQ7ICAgICAgICAvKiBDUFW198a1veG5uSAqLw0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfVVNFX1BTTSAgDQordHlwZWRlZiBzdHJ1Y3QgDQoreyANCisgICAgVUlOVDMyICAgICAgICAgICAgICBkZWVwU2xlZXBUaW1lTGVuOyAgICAgICAvKiDPtc2zye7Lr8PftcS3p9a1ICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgICAgIHNlY29uZFNsZWVwVGltZUxlbjsgICAgIC8qIM+1zbO12rb+tM7Lr8PftcS3p9a1ICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgICAgc2hhZG93U2xlZXBUaW1lTGVuOyAgICAgICAgDQorICAgIFVJTlQzMiAgICAgICAgICAgICAgdGRkVDFQaWNoU2xlZXBUaW1lTGVuOw0KKyNpZmRlZiBfVVNFX0FQUEZMQUdfREZNDQorICAgIFRfWk9zc19QU01fQXBwUG93ICAgKmFwcERmbTsgICAgICAgICAgICAgICAgLyogzrSy5XVzYtOm08O198a1ICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgICAgICBhcHBEZm1OdW07ICAgICAgICAgICAgICAvKiDOtLLldXNi06bTw7X3xrW1xLj2yv0gICAgICAgICAgICAqLw0KKyAgICBUX1pPc3NfUFNNX0FwcFBvdyAgICphcHBVc2JEZm07ICAgICAgICAgICAgIC8qILLlyc91c2LTptPDtffGtSAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgICAgYXBwVXNiRGZtTnVtOyAgICAgICAgICAgLyogsuXJz3VzYtOm08O198a1tcS49sr9ICAgICAgICAgICAgKi8NCisjZW5kaWYgDQorI2lmZGVmIF9VU0VfQ1BVX0RGTQ0KKyAgICBVSU5UMzIgICAgICAgICAgICAgIG1pblRpbWVMZW47ICAgICAgICAgICAgIC8qILX3xrW1xNbcxtogICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgICAgY3B1VGhyZWFkUHJpb3I7ICAgICAgICAgLyogtffGtbXE08XPyLy2ICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgICAgICBjcHVBZGp1c3ROdW07ICAgICAgICAgICAvKiC198a1tcS0zsr9ICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBUX1pQU01fQVJNQ2xvY2tTZXQgICpkZXNDbG9jazsgICAgICAgICAgICAgIC8qIM60suV1c2LJ6NbDY3B1tffGtSAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgICAgZGVzQ2xvY2tOdW07ICAgICAgICAgICAgLyogzrSy5XVzYsno1sNjcHW198a1tcS49sr9ICAgICAgICAgKi8NCisgICAgVF9aUFNNX0FSTUNsb2NrU2V0ICAqdXNiRGVzQ2xvY2s7ICAgICAgICAgICAvKiCy5cnPdXNiyejWw2NwdbX3xrUgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgICAgIHVzYkRlc0Nsb2NrTnVtOyAgICAgICAgIC8qILLlyc91c2LJ6NbDY3B1tffGtbXEuPbK/SAgICAgICAgICovDQorICAgIFRfWk9TU19DUFVfQ2xvY2sgICAgKm1pbkNsb2NrOyAgICAgICAgICAgICAgLyogwaK8tLX3xrUgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgICAgICBtaW5DbG9ja051bTsNCisgICAgQVJNU2NhbGVDcHUgICAgICAgICBzY2FsZUNwdVBjbnQ7ICAgICAgICAgICAvKiBjcHW198a1tcS3p9a1ICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBQU01fSWdub3JlVGhyZWFkICAgICpwc21UaHJlYWROYW1lOyAgICAgICAgIC8qILr2wtTP37PMtcTD+9fWICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgICAgcHNtVGhyZE5hbWVOdW07ICAgICAgICAgLyoguvbC1M/fs8y1xLj2yv0gICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgICAgICAqdXNiU3lzQ2xrOyAgICAgICAgICAgICAvKiCy5cnPdXNiyrGjrM+1zbPWp7PWtcTW98a1ICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgICAgIHVzYlN5c0Nsa051bTsgICAgICAgICAgIC8qILLlyc91c2LKsaOsz7XNs9ans9a1xNb3xrW49sr9ICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICAgICAgKnN5c0NsazsgICAgICAgICAgICAgICAgLyogzrSy5XVzYsqxo6zPtc2z1qez1rXE1vfGtSAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgICAgICBzeXNDbGtOdW07ICAgICAgICAgICAgICAvKiDOtLLldXNiyrGjrM+1zbPWp7PWtcTW98a1uPbK/SAgICAqLw0KKyNlbmRpZg0KKyAgICBVSU5UMzIgICAgICAgICAgICAgIGNoYXJnZXJpbmdTbGVlcFRpbWU7ICAgIC8qILPktefW0Muvw9/Ksbzko6y1pc67bXMgICAgICAgICAgICovDQorfVRfUFNNX1BBUkFNOw0KKyNlbmRpZg0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgUFNNX1NsZWVwSG9va0Z1bmMgICBTbGVlcEhvb2s7ICAvKiDPtc2zy6/D38ewtcS72LX3uq/K/SAqLw0KKyAgICBQU01fU2xlZXBIb29rRnVuYyAgIFdha2V1cEhvb2s7IC8qIM+1zbO8pLvuuvO1xLvYtfe6r8r9ICovDQorfVRfWk9TU19QU01fSE9PSzsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitWT0lEIHpPc3NfSW5zdGFsbFNsZWVwKFBTTV9TbGVlcEZ1bmMgc2hhbGxvd1NsZWVwLCBQU01fU2xlZXBGdW5jIGRlZXBTbGVlcCwgUFNNX1NsZWVwRnVuYyBrZXJuZWxTbGVlcCk7DQorVk9JRCB6T3NzX0luc3RhbGxQc21Ib29rKFRfWk9TU19QU01fSE9PSyAqaG9vayk7DQorVk9JRCB6T3NzX1NldEJvb3RTdGFnZShUX1BzbV9Cb290U3RhZ2Ugc3RhZ2UpOw0KK1ZPSUQgek9zc19TZXRMY2RQc21GbGFnKEJPT0wgZmxhZyk7DQorVUlOVDMyIHpPc3NfU2V0QXBwSWRsZShVSU5UMzIgYXBwSWQpOw0KK1VJTlQzMiB6T3NzX1NldEFwcEFjdGl2ZShVSU5UMzIgYXBwSWQpOw0KK1VJTlQzMiB6T3NzX1NldFBTTUFwcElkbGUoVUlOVDMyIGFwcElkKTsNCitVSU5UMzIgek9zc19TZXRQU01BcHBBY3RpdmUoVUlOVDMyIGFwcElkKTsNCitVSU5UMzIgek9zc19TZXREZXZJZGxlKFVJTlQzMiBkZXZJZCk7DQorVUlOVDMyIHpPc3NfU2V0RGV2QWN0aXZlKFVJTlQzMiBkZXZJZCk7DQorVUlOVDMyIHpPc3NfQXBwbHlDcHVGcmVxKFVJTlQzMiBhcHBJZCwgQk9PTCBpc1VzZWQpOw0KK1VJTlQzMiB6T3NzX1BzbUNsZWFyQXJtMVNsZWVwVGltZShWT0lEKTsNCitVSU5UMzIgek9zc19HZXRTbGVlcFRpbWVGb3JHdWkoVk9JRCk7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDIq77WseTBv8n5w/fH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgIC8qIF9PU1NfUFNNX0ggKi8NCisNCisNCmRpZmYgLS1naXQgYS9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3B1Yi5oIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19wdWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDUyNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19wdWIuaApAQCAtMCwwICsxLDMwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTIgWlRFIENvcnBvcmF0aW9uLg0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMSjIL/pIMP7IDogUDk4Q19PU1MNCisqIM7EILz+IMP7IDogb3NzX3B1Yi5oDQorKiDP4LnYzsS8/iA6IA0KKyogyrXP1rmmxNwgOiC7+bG+wODQzaGixKO/6brFoaK07c7zusWhos/7z6K6xbao0uUNCisqINf3ICAgINXfIDogY2hlbnhpbmdmYW5nDQorKiCw5iAgICCxviA6IFYxLjANCisqIM3qs8nI1cbaIDogMjAxMi0wOC0xMCANCisqIMbky/zLtcP3IDogDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiDQ3rjEvMfCvA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZm5kZWYgX09TU19QVUJfSA0KKyNkZWZpbmUgX09TU19QVUJfSA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogI2luY2x1ZGXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZiBkZWZpbmVkIF9PU19UT1MNCisjaW5jbHVkZSA8cGtnY29uZi9rZXJuZWwuaD4NCisjaW5jbHVkZSA8Y3lnL2hhbC9oYWxfaW50ci5oPg0KKyNpbmNsdWRlIDxjeWcva2VybmVsL2thcGkuaD4NCisjZWxpZiBkZWZpbmVkIF9PU19PU0UNCisjaW5jbHVkZSAib3NlLmgiDQorI2luY2x1ZGUgIm9zZXR5cGVzLmgiDQorI2luY2x1ZGUgIm9zZV9zcGkvYXJtL2NwdV9pbnRsb2NrLmgiDQorI2VsaWYgZGVmaW5lZCAoX09TX0xJTlVYKQ0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPg0KKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4NCisjaWZkZWYgX1VTRV9UQ00NCisjaW5jbHVkZSA8YXNtL3RjbS5oPg0KKyNlbmRpZg0KKyNlbGlmIGRlZmluZWQgX09TX1dJTg0KKyMgaWZuZGVmIF9VU0VfT1NfU09DSw0KKyNkZWZpbmUgX1dJTlNPQ0syX0ggIA0KKyNkZWZpbmUgX1dJTlNPQ0tfSCANCisjZGVmaW5lIF9XSU5TT0NLMkFQSV8gDQorI2RlZmluZSBfV0lOU09DS0FQSV8NCisjIGVuZGlmDQorI2luY2x1ZGUgPHdpbmRvd3MuaD4NCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiDQorew0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogs6PBv7ao0uXH+A0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qILLZ1/fPtc2ztO3O87rFLCAweDAwMDAxMDAwIC0tLSAweDAwMDAxZmZmICovDQorI2RlZmluZSBaT1NTX0VSUiAgICAgICAgICAgICAgICAoMHgwMDAwMTAwMCkNCisNCisNCisvKiDGvcyoz/vPoiAqLw0KKyNkZWZpbmUgRVZfWlBMQVRfQkFTRSAgICAgICAgICAgKDB4MDAwMDEwMDApDQorDQorLyogstnX98+1zbPP+8+iLCC49sr9MHgxMDAwICovDQorI2RlZmluZSBFVl9aT1NTX0JBU0UgICAgICAgICAgICAoRVZfWlBMQVRfQkFTRSkNCisNCisvKiDGvcyoz/vPosf4vOQgKi8NCisjZGVmaW5lIEVWX1pPU1NfU0NIRV9CQVNFICAgICAgIChFVl9aT1NTX0JBU0UpDQorI2RlZmluZSBFVl9aT1NTX1NZU01fQkFTRSAgICAgICAoRVZfWk9TU19CQVNFICsgNTApDQorI2RlZmluZSBFVl9aT1NTX0VYQ0VQX0JBU0UgICAgICAoRVZfWk9TU19CQVNFICsgMTAwKQ0KKyNkZWZpbmUgRVZfWk9TU19UUkFDRV9CQVNFICAgICAgKEVWX1pPU1NfQkFTRSArIDE1MCkNCisjZGVmaW5lIEVWX1pPU1NfTUVNX0JBU0UgICAgICAgIChFVl9aT1NTX0JBU0UgKyAzMDApDQorI2RlZmluZSBFVl9aT1NTX0NPTU1fQkFTRSAgICAgICAoRVZfWk9TU19CQVNFICsgMzUwKQ0KKw0KKy8qIM+1zbO53MDtxKO/6c/7z6IgKi8NCisjZGVmaW5lIEVWX0lOSVQgICAgICAgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDApIC8qIMjOzvGz9cq8u6/P+8+iICAgKi8NCisjZGVmaW5lIEVWX1BPV0VST04gICAgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDEpIC8qIMjOzvHJz7Xnz/vPoiAgICAgKi8NCisjZGVmaW5lIEVWX1BPV0VST0ZGICAgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDIpIC8qIMjOzvHPwrXnz/vPoiAgICAgKi8NCisjZGVmaW5lIEVWX1BPV0VST05fT0sgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDMpIC8qIMjOzvHJz7Xnzeqzyc/7z6IgKi8NCisjZGVmaW5lIEVWX1BTX1NUQVJUICAgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDQpIC8qINCt0unVu8b0tq/P+8+iICAgKi8NCisjZGVmaW5lIEVWX1RBU0tTVE9QICAgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDUpIC8qINCt0unVu9TdzaPP+8+iICAgKi8NCisjZGVmaW5lIEVWX1RBU0tSRVNVTSAgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDYpIC8qINCt0unVu7vWuLTP+8+iICAgKi8NCisjZGVmaW5lIEVWX1NZU01fRE9XTiAgICAgICAgICAgIChFVl9aT1NTX1NZU01fQkFTRSArIDcpIC8qILnYu/rP+8+iICAgICAgICAgKi8NCisNCisvKiBHVUnP+8+iICovDQorI2RlZmluZSBFVl9aR1VJX0JBU0UgICAgICAgICAgICAoMHgwMDAwMjAwMCkNCisNCisvKiDQrdLp1buy4srUuaS+38/7z6IgKi8NCisjZGVmaW5lIEVWX1pQVEVfQkFTRSAgICAgICAgICAgIChFVl9aUExBVF9CQVNFICsgMHgwMDAwODAwMCkgDQorDQorLyogz7XNs7mrubK08tOhxKO/6brFICovDQorI2RlZmluZSBTVUJNRExfU1lTQkFTRSAgICAgICAgICAoMSkNCisjZGVmaW5lIFNVQk1ETF9QVUIgICAgICAgICAgICAgIChTVUJNRExfU1lTQkFTRSArIDApICAgIC8qIM+1zbO5q7myICAgICAqLw0KKyNkZWZpbmUgU1VCTURMX1JBTSAgICAgICAgICAgICAgKFNVQk1ETF9TWVNCQVNFICsgMSkgICAgLyogzflSQU208tOhICAgICovDQorI2RlZmluZSBTVUJNRExfRklMRSAgICAgICAgICAgICAoU1VCTURMX1NZU0JBU0UgKyAyKSAgICAvKiDN+c7EvP608tOhICAgKi8NCisjZGVmaW5lIFNVQk1ETF9MQ0QgICAgICAgICAgICAgIChTVUJNRExfU1lTQkFTRSArIDMpICAgIC8qIM35TENEtPLToSAgICAqLw0KKw0KKy8qIE9TU7Ty06HEo7/pusUgKi8NCisjZGVmaW5lIFNVQk1ETF9PU1NCQVNFICAgICAgICAgICgxMCkNCisjZGVmaW5lIFNVQk1ETF9DT01NT04gICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDApICAgIC8qILmrubLEo7/pICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9PU0EgICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDEpICAgIC8qIE9TQcSjv+kgICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9TQ0hFICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDIpICAgIC8qILX3tsjNqNG2ICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9NRU0gICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDMpICAgIC8qIMTatOa53MDtICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9TWVNNICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDQpICAgIC8qIFNZU03Eo7/pICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9USU1FUiAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDUpICAgIC8qILaoyrHG98Sjv+kgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9FWENFUCAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDYpICAgIC8qINLss6O0psDtICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9ORVQgICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDcpICAgIC8qIE5FVMSjv+kgICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9GUyAgICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDgpICAgIC8qIM7EvP60+sDtxKO/6SAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9UUkFDRSAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDkpICAgIC8qIHRyYWNlxKO/6SAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9URVNUICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDEwKSAgIC8qIHRlc3TEo7/pICAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9FVkVOVCAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDExKSAgIC8qIEV2ZW50xKO/6SAgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9OViAgICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDEyKSAgIC8qIE5WtPrA7cSjv+kgICAgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9TSEVMTCAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDEzKSAgIC8qIFNIRUxMtPrA7cSjv+kgICAgKi8NCisjZGVmaW5lIFNVQk1ETF9BTVQgICAgICAgICAgICAgIChTVUJNRExfT1NTQkFTRSArIDE0KSAgIC8qIEFNVLT6wO3Eo7/pICAgICAgKi8NCisNCisvKiDQrdLp1buy4srUuaS+38Sjv+m6xSAqLw0KKyNkZWZpbmUgU1VCTURMX1BURSAgICAgICAgICAgICAgKFNVQk1ETF9PU1NCQVNFICsgMTUpIA0KKw0KKy8qIERSVrTy06HEo7/pusUgKi8NCisjZGVmaW5lIFNVQk1ETF9EUlZCQVNFICAgICAgICAgICgyNSkNCisjZGVmaW5lIFNVQk1ETF9EQUwgICAgICAgICAgICAgIChTVUJNRExfRFJWQkFTRSArIDApICAgIC8qIERBTMSjv+kgICovDQorI2RlZmluZSBTVUJNRExfREQgICAgICAgICAgICAgICAoU1VCTURMX0RSVkJBU0UgKyAxKSAgICAvKiBERMSjv+kgICAqLw0KKyNkZWZpbmUgU1VCTURMX0hBTCAgICAgICAgICAgICAgKFNVQk1ETF9EUlZCQVNFICsgMikgICAgLyogSEFMxKO/6SAgKi8NCisjZGVmaW5lIFNVQk1ETF9NVVggICAgICAgICAgICAgIChTVUJNRExfRFJWQkFTRSArIDMpICAgIC8qIE1VWMSjv+kgICovDQorDQorI2RlZmluZSBTVUJNRExfSU1TICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAvKiBJTVPQxcHuxKO/6SAqLw0KKw0KKy8qIE1VTFRJTUVESUG08tOhxKO/6brFICovDQorI2RlZmluZSBTVUJNRExfTU1CQVNFICAgICAgICAgICAoNjApDQorLyogTU9OSVRPUrj619nEo7/pusUgKi8NCisjZGVmaW5lIFNVQk1ETF9NT05BR0VOVCAgICAgICAgICgxMjgpDQorDQorI2RlZmluZSBTVUJNRExfWl9FWFRNT0QgICAgICAgICAoQllURSkweGZmDQorI2RlZmluZSBTVUJNRExfWlBTX0VYVE1PRCAgICAgICBTVUJNRExfWl9FWFRNT0QNCisNCisvKiBGQUxTRS9UUlVFtqjS5SAqLw0KKyNpZm5kZWYgX09TX1dJTg0KKyNpZmRlZiAgVFJVRQ0KKyN1bmRlZiAgVFJVRQ0KKyNlbmRpZg0KKyNkZWZpbmUgVFJVRSAgICAoQk9PTCkxDQorICAgICAgICAgICAgDQorI2lmZGVmICBGQUxTRQ0KKyN1bmRlZiAgRkFMU0UNCisjZW5kaWYNCisjZGVmaW5lIEZBTFNFICAgKEJPT0wpMA0KKw0KKy8qINfutPPWtS/X7tCh1rW2qNLlICovDQorI2lmZGVmIF9PU19MSU5VWA0KKyMgZGVmaW5lIG9zc19tYXgoYSxiKSAgICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkNCisjIGRlZmluZSBvc3NfbWluKGEsYikgICAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpDQorI2Vsc2UNCisjIGRlZmluZSBtYXgoYSxiKSAgICAgICAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpDQorIyBkZWZpbmUgbWluKGEsYikgICAgICAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQ0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfREVCVUcNCisjIGRlZmluZSBaT1NTX0ZJTEUgX19GSUxFX18NCisjIGRlZmluZSBaT1NTX0xJTkUgX19MSU5FX18NCisjZWxzZQ0KKyMgZGVmaW5lIFpPU1NfRklMRSBOVUxMDQorIyBkZWZpbmUgWk9TU19MSU5FIDANCisjZW5kaWYNCisNCisjZGVmaW5lIF9fX3N0cih4KSAgICN4DQorI2RlZmluZSBfX3N0cih4KSAgICBfX19zdHIoeCkNCisNCisjZGVmaW5lIFpPU1NfVU5VU0VEX1BBUkFNKF9uYW1lXykgICBfbmFtZV8gPSBfbmFtZV87DQorI2RlZmluZSBaT1NTX1VOVVNFRF9QVFIoX25hbWVfKSAgICAgaWYgKF9uYW1lXykgX25hbWVfID0gX25hbWVfOw0KKyNkZWZpbmUgWk9TU19NQUNST19TVEFSVCAgICAgICAgICAgIGRvIHsNCisjZGVmaW5lIFpPU1NfTUFDUk9fRU5EICAgICAgICAgICAgICB9IHdoaWxlICgwKQ0KKw0KKyNkZWZpbmUgQUxJR05fVE8oYmFzZSwgYWxpZ24pICAgICAgICgoYmFzZSArIChhbGlnbiAtIDEpKSAmIH4oYWxpZ24gLSAxKSkNCisjaWZuZGVmIF9PU19MSU5VWA0KKyNkZWZpbmUgQVJSQVlfU0laRShhcnJheSkgICAgICAgICAgIChzaXplb2YoYXJyYXkpL3NpemVvZihhcnJheVswXSkpDQorI2VuZGlmDQorI2RlZmluZSBBUlJBWV9TVEFSVChhcnJheSkgICAgICAgICAgKCZhcnJheVswXSkNCisjZGVmaW5lIEFSUkFZX0VORChhcnJheSkgICAgICAgICAgICAoJmFycmF5W3NpemVvZihhcnJheSkvc2l6ZW9mKGFycmF5WzBdKV0pDQorDQorLyogMbj2z7XNs7XOtPDL+dDotcS6wcPryv0gKi8NCisjaWYgZGVmaW5lZCBfT1NfVE9TDQorIyBkZWZpbmUgWk9TU19NU19QRVJfVElDSyAgIChDWUdOVU1fSEFMX1JUQ19QRVJJT0QgLyAxMDAwKSAgIA0KKyNlbGlmIGRlZmluZWQgX09TX09TRQ0KKyMgZGVmaW5lIFpPU1NfTVNfUEVSX1RJQ0sgICAoc3lzdGVtX3RpY2soKSAvIDEwMDApIA0KKyNlbGlmIGRlZmluZWQgX09TX1dJTg0KKyMgZGVmaW5lIFpPU1NfTVNfUEVSX1RJQ0sgICAxDQorI2VsaWYgZGVmaW5lZCBfT1NfTElOVVgNCisjIGRlZmluZSBaT1NTX01TX1BFUl9USUNLICAgMQ0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyv2+3b3hubm2qNLlx/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiC7+bG+wODQzSAqLw0KK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgICAgICBTSU5UODsNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgVUlOVDg7DQordHlwZWRlZiBzaG9ydCAgICAgICAgICAgICAgIFNJTlQxNjsNCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgVUlOVDE2Ow0KK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICBTSU5UMzI7DQordHlwZWRlZiBVSU5UOCAgICAgICAgICAgICAgIEJJVFM7DQorDQorI2lmbmRlZiBfT1NfV0lODQordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgIFVJTlQzMjsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgVUlOVDY0Ow0KK3R5cGVkZWYgbG9uZyBsb25nICAgICAgICAgICBTSU5UNjQ7DQordHlwZWRlZiBmbG9hdCAgICAgICAgICAgICAgIEZMT0FUOw0KK3R5cGVkZWYgZG91YmxlICAgICAgICAgICAgICBET1VCTEU7DQordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgIEJPT0w7DQorDQorI2lmbmRlZiBWT0lEDQorI2RlZmluZSBWT0lEICAgICAgICAgICAgICAgIHZvaWQNCisjZW5kaWYNCisNCisjaWZuZGVmIENIQVINCisjZGVmaW5lIENIQVIgICAgICAgICAgICAgICAgY2hhcg0KKyNlbmRpZg0KKyANCit0eXBlZGVmIFVJTlQzMiAgICAgICAgICAgICAgU1NJWkVfVDsNCit0eXBlZGVmIFVJTlQ4ICAgICAgICAgICAgICAgQllURTsNCit0eXBlZGVmIFNJTlQxNiAgICAgICAgICAgICAgU0hPUlQ7DQordHlwZWRlZiBTSU5UMzIgICAgICAgICAgICAgIExPTkc7DQordHlwZWRlZiBVSU5UMTYgICAgICAgICAgICAgIFdPUkQ7DQordHlwZWRlZiBVSU5UMzIgICAgICAgICAgICAgIERXT1JEOw0KK3R5cGVkZWYgVUlOVDMyICAgICAgICAgICAgICBIQU5ETEU7DQordHlwZWRlZiBTSU5UOCAgICAgICAgICAgICAgICpQU1RSOw0KK3R5cGVkZWYgVUlOVDggICAgICAgICAgICAgICAqUEJZVEU7DQordHlwZWRlZiBVSU5UMTYgICAgICAgICAgICAgICpQV09SRDsNCit0eXBlZGVmIFVJTlQzMiAgICAgICAgICAgICAgKlBEV09SRDsNCit0eXBlZGVmIFZPSUQgICAgICAgICAgICAgICAgKlBWT0lEOw0KK3R5cGVkZWYgVUlOVDMyICAgICAgICAgICAgICAqUEhBTkRMRTsNCisjZWxzZSANCit0eXBlZGVmIF9faW50NjQgICAgICAgICAgICAgU0lOVDY0OyAgDQordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0ICAgIFVJTlQ2NDsNCit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgbW9kZV90OyANCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZCAoX09TX1RPUykgfHwgZGVmaW5lZChfT1NfTElOVVgpDQordHlwZWRlZiBTSU5UOCAgIFM4Ow0KK3R5cGVkZWYgVUlOVDggICBVODsNCit0eXBlZGVmIFNJTlQxNiAgUzE2Ow0KK3R5cGVkZWYgVUlOVDE2ICBVMTY7DQordHlwZWRlZiBTSU5UMzIgIFMzMjsgDQordHlwZWRlZiBVSU5UMzIgIFUzMjsNCisNCit0eXBlZGVmIFVJTlQzMiAgUFJPQ0VTUzsNCit0eXBlZGVmIFVJTlQzMiAgT1NBRERSRVNTOw0KK3R5cGVkZWYgVUlOVDggICBPU1BSSU9SSVRZOw0KK3R5cGVkZWYgVUlOVDMyICBPU1RJTUU7DQordHlwZWRlZiBVSU5UMzIgIFNJR1NFTEVDVDsNCit0eXBlZGVmIFVJTlQxNiAgT1NWRUNUT1I7DQordHlwZWRlZiBVSU5UMzIgIE9TVVNFUjsNCisNCit0eXBlZGVmIFZPSUQgKE9TRU5UUllQT0lOVCkoVk9JRCk7DQorDQorZW51bSBQUk9DRVNTX1RZUEUgDQorew0KKyAgICBPU19QUklfUFJPQyA9IDAsDQorICAgIE9TX0JHX1BST0MgID0gNjQsDQorICAgIE9TX0lOVF9QUk9DID0gMTI4LA0KKyAgICBPU19USV9QUk9DICA9IDI1NiwNCisgICAgT1NfUEhBTlRPTSAgPSA1MTIsDQorICAgIE9TX0JMT0NLICAgID0gMTAyNCwNCisgICAgT1NfWk9PTUJJRSAgPSAyMDQ4LA0KKyAgICBPU19JTExFR0FMICA9IDQwOTYNCit9Ow0KKw0KK3N0cnVjdCBPU19yZWRpcl9lbnRyeQ0KK3sNCisgICAgU0lHU0VMRUNUICAgc2lnOw0KKyAgICBQUk9DRVNTICAgICBwaWQ7DQorfTsNCisjZW5kaWYNCisNCisjaWZkZWYgX09TX0xJTlVYDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgICBpbnQgcXVvdDsgICAvKiBxdW90aWVudCAgKi8NCisgICAgaW50IHJlbTsgICAgLyogcmVtYWluZGVyICovDQorfSBkaXZfdDsNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gDQorU0lOVDMyIHpPc3NfR2V0TGFzdEVycm9yKFZPSUQpOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyKu+1rHkwb/J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBfT1NTX1BVQl9IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19zdXAuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3Nfc3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjg2YzMxOAotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3Nfc3VwLmgKQEAgLTAsMCArMSw5NzEgQEAKKy8qKg0KKyAqIEBmaWxlIG9zc19zdXAuaA0KKyAqIEBicmllZiBvc3PEo7/puL2807mmxNwNCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4NCisgKiANCisgKiANCisgKi8NCisNCisjaWZuZGVmIF9PU1NfU1VQX0gNCisjZGVmaW5lIF9PU1NfU1VQX0gNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBoZWFkZXIgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaW5jbHVkZSAicmFtZHVtcC5oIg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyINCit7DQorI2VuZGlmDQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm8gZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmbmRlZiBET1hZR0VOX1NIT1VMRF9TS0lQX1RISVMNCisvKiDJ6NbDu/K78cihysK8/sr00NQgKi8NCisjZGVmaW5lIFpPU1NfRVZFTlRTX09SICAgICAgICAgICAgICAweDAwDQorI2RlZmluZSBaT1NTX0VWRU5UU19BTkQgICAgICAgICAgICAgMHgwMQ0KKyNkZWZpbmUgWk9TU19FVkVOVFNfT1JfQ0xFQVIgICAgICAgIDB4MDINCisjZGVmaW5lIFpPU1NfRVZFTlRTX0FORF9DTEVBUiAgICAgICAweDAzDQorDQorLyogyejWw7vYtfe6r8r9wODQzSAqLw0KKyNkZWZpbmUgWk9TU19TRVRIT09LRkxBR19NT05JICAgICAgIDB4MDEgICAgICAgICAvKiDP+8+ivOC/2CAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfU0VUSE9PS0ZMQUdfVFJBQ0sgICAgICAweDAyICAgICAgICAgLyogz9/Q1Lj619kgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBaT1NTX1NFVEhPT0tGTEFHX0lOVEVSICAgICAgMHgwMyAgICAgICAgIC8qIM/7z6K92LvxICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19TRVRIT09LX1NFTkQgICAgICAgICAgIDB4MDEgICAgICAgICAvKiB6T3NzX1NlbmRNc2fP+8+iwKnVuSAgICAgKi8NCisjZGVmaW5lIFpPU1NfU0VUSE9PS19TRU5EX0RBVEEgICAgICAweDAyICAgICAgICAgLyogek9zc19TZW5kTXNnz/vPosCp1bkgICAgICovDQorI2RlZmluZSBaT1NTX1NFVEhPT0tfR0VUX0FMTF9JRCAgICAgMHgwMyAgICAgICAgIC8qIHpPc3NfR2V0QWxsVGFza0lEwKnVuSAgICAqLw0KKyNkZWZpbmUgWk9TU19TRVRIT09LX0dFVF9JRCAgICAgICAgIDB4MDQgICAgICAgICAvKiB6T3NzX0dldFRhc2tJRMCp1bkgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfU0VUSE9PS19HRVRfTkFNRSAgICAgICAweDA1ICAgICAgICAgLyogek9zc19HZXRUYXNrTmFtZcCp1bkgICAgICovDQorDQorLyogyM7O8c/7z6LXtMysICovDQorI2RlZmluZSBaT1NTX01TR1NFTkRUWVBFX01TRyAgICAgICAgMHgwMSAgICAgICAgIC8qILeiy83P+8+iICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19NU0dTRU5EVFlQRV9EQVRBICAgICAgIDB4MDIgICAgICAgICAvKiC3osvNyv2+3SAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfTVNHU0VORFRZUEVfSU5URVIgICAgICAweDAzICAgICAgICAgLyog1NrW0LbP1tC3osvNICAgICAgICAgICAgICovDQorI2RlZmluZSBaT1NTX01TR1NFTkRUWVBFX1RJTUVSICAgICAgMHgwNCAgICAgICAgIC8qILaoyrHG98/7z6IgICAgICAgICAgICAgICAqLw0KKw0KKy8qIMjOzvHXtMysu/ogKi8NCisjZGVmaW5lIFpPU1NfU1RBVFVTX0lOSVQgICAgICAgICAgICAweDAxICAgICAgICAgLyogs/XKvMysICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBaT1NTX1NUQVRVU19XT1JLICAgICAgICAgICAgMHgwMiAgICAgICAgIC8qILmk1/fMrCAgICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19TVEFUVVNfSURMRSAgICAgICAgICAgIDB4MDMgICAgICAgICAvKiC/1c/QzKwgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfU1RBVFVTX1VTRVJCQVNFICAgICAgICAweDA0ICAgICAgICAgLyog08O7p9e0zKzX1Lao0uUgICAgICAgICAgICovDQorDQorLyogyM7O8dTL0NDXtMysICovDQorI2RlZmluZSBaT1NTX1NUQVRFX1NUT1BQRUQgICAgICAgICAgMHgwMSAgICAgICAgIC8qIMjOzvHU3c2jICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgWk9TU19TVEFURV9JRExFICAgICAgICAgICAgIDB4MDIgICAgICAgICAvKiDIzs7xv9XP0CAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfU1RBVEVfUkVBRFkgICAgICAgICAgICAweDAzICAgICAgICAgLyogyM7O8b7N0PcgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBaT1NTX1NUQVRFX1JVTiAgICAgICAgICAgICAgMHgwNCAgICAgICAgIC8qIMjOzvHUy9DQICAgICAgICAgICAgICAgICAqLw0KKw0KKy8qIM/7z6Kytrvxt73P8iAqLw0KKyNkZWZpbmUgWk9TU19NU0dESVJFX0lOICAgICAgICAgICAgIDB4MDEgICAgICAgICAvKiDK5Mjrz/vPorK2u/EgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFpPU1NfTVNHRElSRV9PVVQgICAgICAgICAgICAweDAyICAgICAgICAgLyogyuSz9s/7z6KytrvxICAgICAgICAgICAgICovDQorI2RlZmluZSBaT1NTX01TR0RJUkVfSU5PVVQgICAgICAgICAgMHgwMyAgICAgICAgIC8qIMurz/KytrvxICAgICAgICAgICAgICAgICAqLw0KKw0KKy8qIM/7z6K3osvN08XPyLy2ICovDQorI2RlZmluZSBaT1NTX1FVRVVFX01TR19QUklfTk9STUFMICAgMHgwMCAgICAgICAgIC8qIG5vcm1hbCBwcmlvcml0eSBtZXNzYWdlo6y8tLfFtb3P+8+ittPB0M6yICovDQorI2RlZmluZSBaT1NTX1FVRVVFX01TR19QUklfVVJHRU5UICAgMHgwMSAgICAgICAgIC8qIHVyZ2VudCBwcmlvcml0eSBtZXNzYWdlo6y8tLfFtb3P+8+ittPB0MrXICovDQorDQorLyogxeTWw7LOyv3X7rTzs6S2yCAqLw0KKyNkZWZpbmUgTUFYX0VWRU5UTkFNRV9MRU4gICAgICAgICAgIDYzICAgICAgICAgIC8qIMrCvP7X6cP7s8bX7rTzs6S2yCAgICAgICAqLw0KKyNkZWZpbmUgTUFYX1FVRVVFTkFNRV9MRU4gICAgICAgICAgIDYzICAgICAgICAgIC8qINfutPPP+8+ittPB0MP7s6S2yCAgICAgICAqLyANCisjZGVmaW5lIFpPU1NfTUFYX1RBU0tOQU1FX0xFTiAgICAgICA2MyAgICAgICAgICAvKiDIzs7xw/uzpLbIICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFNIRUxMX0NNRF9MRU5HVEggICAgICAgICAgICAzMSAgICAgICAgICAvKiBzaGVsbMP8we61xNfutPOzpLbIICAgICAgKi8NCisjZGVmaW5lIFNIRUxMX0NNRF9QQVJBTV9OVU0gICAgICAgICAxMiAgICAgICAgICAvKiBzaGVsbMP8we6yzsr9tcTX7rTzuPbK/SAgKi8NCisjZGVmaW5lIFNIRUxMX0NNRF9QQVJBTV9MRU5HVEggICAgICAyMyAgICAgICAgICAvKiBzaGVsbMP8we6yzsr9tcTX7rTzs6S2yCAgKi8NCisNCisvKiC08tOhICovDQorI2RlZmluZSB6T3NzX1ByaW50ZiAgICAgICAgICAgICAgICAgelRvb2xzX1ByaW50Zg0KKyNkZWZpbmUgUFJJTlRfTEVWRUxfQUxMV0FZUyAgICAgICAgIDB4MDAgICAgICAgIC8qILG+vLax8Nfcyse08tOhICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBQUklOVF9MRVZFTF9ERUJVRyAgICAgICAgICAgMHgwMSAgICAgICAgLyogtffK1Ly2sfAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFBSSU5UX0xFVkVMX05PUk1BTCAgICAgICAgICAweDAyICAgICAgICAvKiDG1c2ovLax8CAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgUFJJTlRfTEVWRUxfU0VWRVJFICAgICAgICAgIDB4MDMgICAgICAgIC8qINHP1ti8trHwICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBQUklOVF9MRVZFTF9BQk5PUk1BTCAgICAgICAgMHgwNCAgICAgICAgLyog0uyzo7y2sfAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIFBSSU5UX0xFVkVMX1JBTSAgICAgICAgICAgICAweDA1ICAgICAgICAvKiC08tOhtb3E2rTmLL321Nq08tOhtPrA7dbQyrnTwyAgICAqLw0KKyNkZWZpbmUgUFJJTlRfTEVWRUxfRk9SQklEICAgICAgICAgIDB4ZmYgICAgICAgIC8qILK7tPLToSAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorDQorLyogTlYgRUNDKi8NCisjZGVmaW5lIFpPU1NfTlZfRUNDX0xPR19OUiAgICAgICAgICAoNikNCisjZGVmaW5lIFpPU1NfTlZfRUNDX1dPUksgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFpPU1NfTlZfRUNDX0JBQ0tVUCAgICAgICAgICAoMikNCisjZGVmaW5lIFpPU1NfTlZfRUNDX0JPVEggICAgICAgICAgICAoMykNCisjZW5kaWYgLy8jaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpZm5kZWYgRE9YWUdFTl9TSE9VTERfU0tJUF9USElTDQorLyogy6vP8sG0se3Eo7/pICovDQordHlwZWRlZiBzdHJ1Y3QgdGFnX05PREUgICAgICAgIA0KK3sNCisgICAgc3RydWN0IHRhZ19OT0RFICpuZXh0OyAgICAgIA0KKyAgICBzdHJ1Y3QgdGFnX05PREUgKnByZXZpb3VzOyAgDQorfVRfWk9zc19Ob2RlOw0KKw0KK3R5cGVkZWYgc3RydWN0ICAgICAgICAgICAgICANCit7DQorICAgIFNJTlQzMiAgICAgIGNvdW50OyAgICAgICAgICAgICANCisgICAgVF9aT3NzX05vZGUgKkhFQUQ7DQorICAgIFRfWk9zc19Ob2RlICpUQUlMOw0KK31UX1pPc3NfTGlzdDsNCisNCisvKiC7t9DOu7qz5cSjv+kgKi8NCit0eXBlZGVmIHN0cnVjdCAgICAgDQorew0KKyAgICBTSU5UMzIgIHBUb0J1ZjsgICAgIC8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGJ1ZmZlciB3aGVyZSB0byB3cml0ZSBuZXh0ICAqLw0KKyAgICBTSU5UMzIgIHBGcm9tQnVmOyAgIC8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGJ1ZmZlciB3aGVyZSB0byByZWFkIG5leHQgICAqLw0KKyAgICBTSU5UMzIgIGJ1ZlNpemU7ICAgIC8qIHNpemUgb2YgcmluZyBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBDSEFSICAgICpidWY7ICAgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAqLw0KK31UX1pPc3NfUmluZywgKlRfWk9zc19SaW5nSWQ7DQorDQorLyogtqjKscb3udzA7cSjv+kgMjAxMzA0MTXSxtbBb3NhLmgqLw0KKw0KKy8qIElUQ8Sjv+kgMjAxMzA1MjMgyb6z/SovDQorDQorLyogcmFtZHVtcCC50r3Tuq/K/cDg0M0gKi8NCit0eXBlZGVmIFZPSUQgKCpUX3pPc3NfUmFtZHVtcEhvb2tGdW5jKShWT0lEKTsgDQorDQorLyogz/vPorncwO3Eo7/pICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIFRfWk9zc19Ob2RlICAgICBub2RlOw0KKyAgICBaT1NTX1RBU0tfSUQgICAgdF90YXNrX2lkOyAgICAgIC8qIMS/serIzs7xSUQgICAqLw0KKyAgICBaT1NTX1RBU0tfSUQgICAgc190YXNrX2lkOyAgICAgIC8qINS0yM7O8UlEICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgbXNnSUQ7ICAgICAgICAgIC8qIM/7z6JJRCAgICAgICAqLw0KKyAgICBVSU5UMTYgICAgICAgICAgbXNnTGVuOyAgICAgICAgIC8qIM/7z6LM5bOktsggICAqLw0KKyAgICBVSU5UOCAgICAgICAgICAgc2VuZF9zdGF0ZTsgICAgIC8qIM/7z6K3osvN17TMrCAqLw0KK31UX1pPc3NfVGFza01zZ0hlYWQ7ICAgICAgICAgICAgICAgIC8qIM/7z6LNtyAgICAgICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBWT0lEICAgICptc2didWY7DQorICAgIFVJTlQxNiAgbXNnTGVuRVg7DQorfVRfWk9zc19UYXNrTXNnOyAgICAgICAgLyogz/vPoszlICovDQorDQordHlwZWRlZiBVSU5UMzIgKCpUQVNLX1NFTkRfSE9PSykoVF9aT3NzX1Rhc2tNc2dIZWFkICpidWYsIFVJTlQ4IGRpcmUpOw0KKw0KKy8qIMjOzvG53MDtxKO/6SAqLyAgICAgICAgICAgICAgICAgICAgDQordHlwZWRlZiBWT0lEICgqRlVOQ19UQVNLRU5UUlkpKFVJTlQ4IHN0YXRlLCBVSU5UMzIgbXNnX2lkLCBVSU5UOCAqYnVmLCBVSU5UMTYgbXNnX2xlbiwgVUlOVDggKnByaXZhdGVfZGF0YSk7DQorDQordHlwZWRlZiBzdHJ1Y3Qgc3RydVRDQg0KK3sNCisgICAgVF9aT3NzX05vZGUgICAgIG5vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDLq8/ywbSx7b3hteMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogx/i31srHt/FTREzIzs7xICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIMjOzvHWtNDQtcS0zsr9ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgQ0hBUiAgICAgICAgICAgIHRhc2tfbmFtZVtaT1NTX01BWF9UQVNLTkFNRV9MRU4gKyAxXTsgICAvKiDIzs7xw/sss6S2yNfutPM2MyAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIEZVTkNfVEFTS0VOVFJZICB0YXNrRW50cnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogyM7O8cjrv9ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBUQVNLX1NFTkRfSE9PSyAgSG9va0VudHJ5WzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qILvYtfe6r8r9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgWk9TU19UQVNLX0lEICAgIHRhc2tfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDIzs7xSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFpPU1NfVEFTS19JRCAgICBzZW5kZXJfdGFza19pZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogz/vPotS0yM7O8UlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBaT1NTX1RIUkVBRF9JRCAgdGhyZWFkX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIMv51NrP37PMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVF9aT3NzX0xpc3QgICAgIG1zZ19xdWV1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDIzs7xz/vPorbTwdDBtLHtICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBzdGFja19zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogttHVu7Tz0KEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgcHJpb3JpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIMjOzvHTxc/IvLYoMC0zMSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgIHByaXZhdGVfZGF0YV9sZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiDLvdPQyv2+3bOktsggICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICB0aW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogyM7O8bS0vajKsbzkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgc3RhY2tfdXNlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qINLR08O20dW7tPPQoSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgIHRhc2tfdGltZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDIzs7xv6rKvMqxvOQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICBtc2dfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogtbHHsMjOzvHP+8+iSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UOCAgICAgICAgICAgZGlyZVs0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIM/7z6Kytrvxt73P8iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDggICAgICAgICAgIHRocmVhZF9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDP37PMusUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQ4ICAgICAgICAgICBydW5fc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog1MvQ0Ne0v/YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UOCAgICAgICAgICAgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIMjOzvHXtMysICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDggICAgICAgICAgICp0YXNrRGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDIzs7xyv2+3cf41rjV6yAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIHN0cnVjdCBzdHJ1VENCICAqbmV4dDsNCisgICAgVUlOVDMyICAgICAgICAgIGNwdXRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDIzs7x1MvQ0GNwdcqxvOQgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIEZMT0FUICAgICAgICAgICBjcHVwZXJjZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogyM7O8WNwddW808PCyiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgICAgICAgICAgcnVudGltZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIMjOzvHUy9DQyrG85CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgIG1hbGxvY19zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiDIzs7xy/nTw21hbGxvY7Tz0KEgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICB1Yl9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogyM7O8cv508PE2rTms9i089ChICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UOCAgICAgICAgICAgcmVzZXJ2ZWRbNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qILGjwfTOu6OstdrSu7j219a92s6qz7XNs76yzKzIzs7xserWvs67ICAgKi8NCit9VF9aT3NzX1RDQjsgICAgICAgICAgICAgICAgICAgICAgLyogyM7O8b/Y1sa/6SAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgVUlOVDggICAgICAgICAgIGlzX3VzZTsNCisgICAgQ0hBUiAgICAgICAgICAgIHRhc2tfbmFtZVtaT1NTX01BWF9UQVNLTkFNRV9MRU4gKyAxXTsNCisgICAgRlVOQ19UQVNLRU5UUlkgIHRhc2tfZW50cnk7DQorICAgIFVJTlQzMiAgICAgICAgICBwcmlvcml0eTsNCisgICAgVUlOVDMyICAgICAgICAgIHN0YWNrX3NpemU7DQorICAgIFVJTlQzMiAgICAgICAgICBwcml2YXRlX2RhdGFfbGVuOw0KKyAgICBVSU5UOCAgICAgICAgICAgcHJvY2Vzc19ubzsNCisgICAgVUlOVDggICAgICAgICAgIGFja19mbGFnOw0KKyNpZmRlZiBfVVNFX0hBTF9IUkRUU1QNCisgICAgQk9PTCAgICAgICAgICAgIGhhcmRUZXN0RmxhZzsNCisjZW5kaWYNCit9VF9aT3NzX1Rhc2tUYWJJdGVtOyAgICAvKiDIzs7xtce8x7HtICovDQorDQorLyogU0RMyM7O8SAqLw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgVF9aT3NzX05vZGUgICAgIG5vZGU7ICAgICAgICAgICAvKiCxo8H0ICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogx/i31srHt/FTREzIzs7xICAqLw0KKyAgICBTSU5UMzIgICAgICAgICAgaW5kZXg7ICAgICAgICAgIC8qIMv30v0gICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICAgICAgICAgIHNlbGZfaWQ7DQorICAgIFpPU1NfVEhSRUFEX0lEICB0aHJlYWRfaWQ7ICAgICAgLyogy/nU2s/fs8xJRCAgICAgICAqLw0KKyAgICBWT0lEICAgICAgICAgICAgKnNlbGY7DQorICAgIFRBU0tfU0VORF9IT09LICBIb29rRW50cnlbM107ICAgLyogu9i197qvyv0gICAgICAgICAqLw0KKyAgICBVSU5UOCAgICAgICAgICAgZGlyZVs0XTsgICAgICAgIC8qIM/7z6Kytrvxt73P8iAgICAgKi8NCit9VF9aT3NzX1NETFRDQjsgICAgICAgICAgICAgICAgICAgICAvKiBTREzIzs7xv9jWxr/pICAgICovICAgIA0KKw0KK3R5cGVkZWYgc3RydWN0IHNpZ25hbGNvZGVfZGVzYyANCit7DQorICAgIFVJTlQzMiAgc2VsZmlkOw0KKyAgICBDSEFSICAgIHRhc2tfbmFtZVtaT1NTX01BWF9UQVNLTkFNRV9MRU4gKyAxXTsNCit9IFRfWk9zc19TaWduYWxDb2RlX0Rlc2M7DQorDQordHlwZWRlZiBzdHJ1Y3QgDQorew0KKyAgICBVSU5UMzIgICAgICAgICAgc2VsZmlkOw0KKyAgICBaT1NTX1RBU0tfSUQgICAgdGFza19pZDsNCit9dGFza3NkbF9kZXNjOw0KKy8qIHNoZWxsw/zB7iAqLw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgQ0hBUiAgICBjbWRbU0hFTExfQ01EX0xFTkdUSCArIDFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIMP8we7X1rf7tK6zpLbIICAgICAgICovDQorICAgIENIQVIgICAgcGFyYVtTSEVMTF9DTURfUEFSQU1fTlVNXVtTSEVMTF9DTURfUEFSQU1fTEVOR1RIICsgMV07ICAvKiCyzsr9ICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgIHBhcmFDb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogss7K/bj2yv0gICAgICAgICAgICAgKi8NCit9VF9TaGVsbF9Db21tYW5kTWVzc2FnZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlaGxsw/zB7s/7z6K94bm5zOUgICovDQorDQordHlwZWRlZiBWT0lEICgqU2hlbGxfRnVuYykoVF9TaGVsbF9Db21tYW5kTWVzc2FnZSAqQ21kTXNnKTsgICAgICAgICAvKiBzaGVsbMP8we7Ktc/Wuq/K/da41esgKi8NCisNCisvKiC2r8ysxeTWw8Dg0M22qNLlICovDQordHlwZWRlZiBzdHJ1Y3QgDQorew0KKyAgICBVSU5UOCAoKnBQcmlvTWFwKVszMl07DQorfVRfT1NBX1BBUkFNOw0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgVUlOVDMyICAgICAgICAgIHViX3Bvb2xfbnVtOyAgICAvKiDE2rTms9i49sr9LCDX7rTzsrvE3LOsuf0yNTUgICovDQorICAgIFRfWk9zc19VQlBPT0wgICAqVUJQb29sOyAgICAgICAgLyogxNq05rPYxeTWw7Ht1rjV6yAgICAgICAgICAgICAqLw0KK31UX01FTV9QQVJBTTsgICAgICAgICAgICAgICAgICAgICAgIC8qIMTatObEo7/pICAgICAgICAgICAgICAgICAgICAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFVJTlQzMiAgbWF4X3Rhc2tfbnVtOyAgICAgICAgICAgLyog1+6088jOzvHK/SAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgIG1heF9zY2h0aHJlYWRfbnVtOyAgICAgIC8qILX3tsjP37PMyv2jrNfutuAxMCAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICBtYXhfbXNnX3F1ZXVlX2xlbjsgICAgICAvKiDIzs7xz/vPorbTwdCzpLbIICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgZGVhZGxvb3BfdGltZTsgICAgICAgICAgLyogy8DRrbu3xdC2z8qxvOQsILWlzrtzICAgICAgICAqLw0KK31UX1RBU0tfUEFSQU07ICAgICAgICAgICAgICAgICAgICAgIC8qIMjOzvHEo7/pICAgICAgICAgICAgICAgICAgICAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFVJTlQzMiAgU2NoUHJpbzsgICAgICAgICAgICAgICAgLyogtqjKscb3tfe2yM/fs8zTxc/IvLYwLTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICBDYWxsQmFja1N0YWNrOyAgICAgICAgICAvKiC2qMqxxve72LX3uq/K/c/fs8y20dW7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBVSU5UMzIgIENhbGxCYWNrUHJpbzsgICAgICAgICAgIC8qILaoyrHG97vYtfe6r8r9z9+zzNPFz8i8tqOssdjQ67XN09q197bIz9+zzNPFz8i8tqOs0ruw486qU2NoUHJpbysxICAgICovDQorICAgIFVJTlQzMiAgTWluVGltZUxlbjsgICAgICAgICAgICAgLyogtqjKscb31+7QobXEs6zKscqxvOQstaXOu7rBw+sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICBNYXhUaW1lTnVtOyAgICAgICAgICAgICAvKiDX7rTztqjKscb3uPbK/SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK31UX1RJTUVSX1BBUkFNOyAgICAgICAgICAgICAgICAgICAgIC8qILaoyrHG98Sjv+kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgDQorew0KKyAgICBVSU5UMzIgIERlYWRMb29wQ2hlY2tUaW1lOyAgICAgIC8qIMvA0a27t7zssunKsbzkICAgICAgICAgICAgICAgICAgICovDQorICAgIFVJTlQzMiAgVXBkYXRlQ1BVVGltZTsgICAgICAgICAgLyogy6LQwkNQVcq508PCysqxvOQgICAgICAgICAgICAgICAgKi8NCisgICAgVUlOVDMyICBEZWFtb25TdGFydFRpbWU7ICAgICAgICAvKiDPtc2zs/XKvLuvuvNFeGNlcMjOzvHG9LavtcTKsbzkICAqLw0KK31UX0VYQ0VQX1BBUkFNOyAgICAgICAgICAgICAgICAgICAgIC8qINLss6PEo7/pICAgICAgICAgICAgICAgICAgICAgICAgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgDQorew0KKyAgICBUX1pPc3NfVGFza1RhYkl0ZW0gICpwU3lzbV9UYXNrSXRlbVRhYjsNCisgICAgVUlOVDMyICAgICAgICAgICAgICB0YXNrX251bTsNCit9VF9TWVNNX1BBUkFNOyAgLyogc3lzbcSjv+kgKi8NCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFVJTlQzMiAgKnBOdkFkZHJDZmc7DQorICAgIFVJTlQzMiAgYWRkckNmZ051bTsNCisgICAgVk9JRCAgICAqcFJldk52Q2ZnOw0KKyAgICBVSU5UMzIgIHJldk52Q2ZnTnVtOw0KKyAgICBVSU5UMzIgIE5WX1dvcmtfQXJlYV9CYXNlX0FkZHI7ICAgICAgIC8qIE5WuaTX98f4u/m12Na3ICAgICAgICovDQorICAgIFVJTlQzMiAgTlZfU3RhcnRfQmFja3VwX0Jhc2VfQWRkcjsgICAgLyogsbi33b/ptcTG8Mq8tdjWtyAgICAgKi8NCisgICAgVUlOVDMyICBOVl9CYWNrdXBfQXJlYV9CYXNlX0FkZHI7ICAgICAvKiBOVrG4t93H+Lv5tdjWtyAgICAgICAqLyAgICANCisgICAgVUlOVDMyICBOVl9CYWNrdXBfQXJlYV9TaXplOyAgICAgICAgICAvKiBOVrG4t93H+LTz0KEgICAgICAgICAqLw0KKyAgICBVSU5UMzIgIE5WX0ZhY3RvcnlfQXJlYV9CYXNlX0FkZHI7ICAgIC8qIE5Ws/azp8f4u/m12Na3ICAgICAgICovDQorICAgIFVJTlQzMiAgTlZfRmFjdG9yeV9BcmVhX1NpemU7ICAgICAgICAgLyogTlaz9rOnx/i089ChICAgICAgICAgKi8NCisgICAgVUlOVDMyICBOVl9Xb3JrX0FyZWFfU3ltYm9sX0FkZHI7ICAgICAvKiC5pNf3x/jQtLHq1r7Ou7XY1rcgICAqLw0KKyAgICBVSU5UMzIgIE5WX0JhY2t1cF9BcmVhX1N5bWJvbF9BZGRyOyAgIC8qILG4t93H+NC0serWvs67tdjWtyAgICovDQorICAgIFVJTlQzMiAgTlZfRmFjdG9yeV9BcmVhX1N5bWJvbF9BZGRyOyAgLyogs/azp8f4serWvs67tdjWtyAgICAgKi8NCisgICAgVUlOVDMyICBOVl9SZXNldF9GYWN0b3J5X1N5bWJvbF9BZGRyOyAvKiC71ri0s/azp8no1sOx6ta+tdjWtyAqLw0KKyAgICBVSU5UMzIgIE5WX0VjY19sb2dfQWRkcjsgICAgICAgICAgICAgIC8qIEVjYyBMb2e5pNf3x/i12Na3ICAgICovDQorICAgIFVJTlQzMiAgTlZfQmxvY2tfU2l6ZTsgICAgICAgICAgICAgICAgLyogv+m089ChICAgICAgICAgICAgICAgKi8NCit9VF9OVlJBTV9QQVJBTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOVlJBTcf40/K12Na30MXPoiAgICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBVSU5UOCAgY291bnQ7DQorICAgIFVJTlQ4ICBpbmRleDsNCisgICAgVUlOVDggIHR5cGVbWk9TU19OVl9FQ0NfTE9HX05SXTsNCisgICAgVUlOVDMyIHRpY2tbWk9TU19OVl9FQ0NfTE9HX05SXTsNCisgICAgVUlOVDMyIGFkZHJbWk9TU19OVl9FQ0NfTE9HX05SXTsNCit9VF9aT3NzX052RWNjTG9nOw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBVSU5UMzIgIFdvcmtfQXJlYV9CYXNlX0FkZHI7ICAgICAgIC8qIHZTSU25pNf3x/i7+bXY1rcgICAqLw0KKyAgICBVSU5UMzIgIEJhY2t1cF9BcmVhX0Jhc2VfQWRkcjsgICAgIC8qIHZTSU2xuLfdx/i7+bXY1rcgICAqLyAgICANCisgICAgVUlOVDMyICBGYWN0b3J5X0FyZWFfQmFzZV9BZGRyOyAgICAvKiB2U0lNs/azp8f4u/m12Na3ICAgKi8NCisgICAgVUlOVDMyICBBcmVhX1NpemU7ICAgICAgICAgICAgICAgICAvKiB2U0lNtaW49sf4tPPQoSAgICAgKi8NCisgICAgVUlOVDMyICBXb3JrX0FyZWFfU3ltYm9sX0FkZHI7ICAgICAvKiC5pNf3x/jQtLHq1r7Ou7XY1rcgKi8NCisgICAgVUlOVDMyICBCYWNrdXBfQXJlYV9TeW1ib2xfQWRkcjsgICAvKiCxuLfdx/jQtLHq1r7Ou7XY1rcgKi8NCisgICAgVUlOVDMyICBGYWN0b3J5X0FyZWFfU3ltYm9sX0FkZHI7ICAvKiCz9rOnx/ix6ta+zru12Na3ICAgKi8NCit9VF92U0lNX1BBUkFNOw0KKw0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgICAgQ0hBUiAgICBXaW5EaXNrWzRdOyAgICAvKiB3aW5kb3dzxcy3+yAgICAgICovDQorICAgIENIQVIgICAgTGludXhQYXRoWzIwXTsgLyogwOBsaW51eMnosbjD+yAgICAqLw0KKyAgICBDSEFSICAgIEZvcm1hdFsyMF07ICAgIC8qIM7EvP7Ptc2zwODQzSAgICAgKi8NCisgICAgQ0hBUiAgICBEZXZpY2VbMjBdOyAgICAvKiDJ6LG4w/sgICAgICAgICAgICovDQorICAgIENIQVIgICAgUGFyYW1zWzEwMF07ICAgLyogz+C52LLOyv0gICAgICAgICAqLw0KKyAgICBDSEFSICAgIE1hbmFnZXJbNDBdOyAgIC8qILncwO3P37PMw/sgICAgICAgKi8NCit9VF9PU0FfRElTS01BUDsNCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFRfT1NBX0RJU0tNQVAgICAqZGlza01hcDsNCisgICAgVUlOVDMyICAgICAgICAgIGRpc2tOdW07DQorfVRfRElTS19QQVJBTTsNCisNCit0eXBlZGVmIFZPSUQgKCpyYW1kdW1wX0hvb2spKFZPSUQpOw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICByYW1kdW1wX0hvb2sgcmFtZHVtcF9Qcm9jZXNzX1ByZUhvb2s7DQorICAgIHJhbWR1bXBfSG9vayByYW1kdW1wX1Byb2Nlc3NfQWZ0SG9vazsNCit9VF96T3NzX1JhbWR1bXBPcHQ7DQorDQorDQordHlwZWRlZiBWT0lEICgqcmFtZHVtcF9Jb0luaXQpKFZPSUQpOw0KK3R5cGVkZWYgVk9JRCAoKnJhbWR1bXBfSW9SZWFkRGF0YSkoVUlOVDggKmJ1ZmZlciwgVUlOVDMyIHNpemUpOw0KK3R5cGVkZWYgVk9JRCAoKnJhbWR1bXBfSW9Xcml0ZURhdGEpKFVJTlQ4ICpidWZmZXIsIFVJTlQzMiBzaXplKTsNCit0eXBlZGVmIFZPSUQgKCpyYW1kdW1wX0lvRmluaXNoKShWT0lEKTsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgcmFtZHVtcF9Jb0luaXQgICAgICBpbml0Ow0KKyAgICByYW1kdW1wX0lvUmVhZERhdGEgIHJlYWQ7DQorICAgIHJhbWR1bXBfSW9Xcml0ZURhdGEgd3JpdGU7DQorICAgIHJhbWR1bXBfSW9GaW5pc2ggICAgZmluaXNoOw0KK30gVF96T3NzX1JhbWR1bXBJb09wdDsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgVUlOVDMyICBiYXNlRm9yU2VydmVyOw0KKyAgICBVSU5UMzIgIGJhc2VGb3JTZWxmOw0KKyAgICBVSU5UMzIgIGJhc2VGb3JDb3B5Ow0KKyAgICBVSU5UMzIgIHNpemU7DQorfSBUX3pPc3NfUmFtZHVtcFJlZ2lvbjsNCisNCit0eXBlZGVmIHN0cnVjdCANCit7DQorICAgIFRfT1NBX1BBUkFNICAgICBPc2FDZmc7ICAgICAvKiBvc2HF5NbDICAgICAgICAgICAgICAqLw0KKyAgICBUX0RJU0tfUEFSQU0gICAgRGlza01hcDsgICAgLyogtMXFzNOzyeTF5NbDICAgICAgICAgKi8NCisgICAgVF9NRU1fUEFSQU0gICAgIE1lbUNmZzsgICAgIC8qIMTatObF5NbDICAgICAgICAgICAgICovDQorICAgIFRfVEFTS19QQVJBTSAgICBUYXNrQ2ZnOyAgICAvKiDIzs7xxeTWwyAgICAgICAgICAgICAqLw0KKyAgICBUX1RJTUVSX1BBUkFNICAgVGltZXJDZmc7ICAgLyogtqjKscb3xeTWwyAgICAgICAgICAgKi8NCisgICAgVF9FWENFUF9QQVJBTSAgIEV4Y2VwQ2ZnOyAgIC8qINLss6PF5NbDICAgICAgICAgICAgICovDQorICAgIFRfU1lTTV9QQVJBTSAgICBTeXNtQ2ZnOyAgICAvKiBzeXNtdMXk1sMgICAgICAgICAgICAqLw0KKyAgICBUX05WUkFNX1BBUkFNICAgTnZyYW1DZmc7ICAgLyogTnbF5NbDICAgICAgICAgICAgICAgKi8NCisgICAgVF92U0lNX1BBUkFNICAgIHZTSU1DZmc7ICAgIC8qIHZTaW3F5NbDICAgICAgICAgICAgICovDQorI2lmZGVmIF9VU0VfUFNNDQorI2lmZGVmIF9VU0VfUFNNX05FV19GUkFNRVdPUksNCisgICAgVF96UHNtX1BhcmFtICAgIFBzbUNmZzsgICAgIC8qIFBzbcXk1sMgICAgICAgICAgICAgICovDQorI2Vsc2UNCisgICAgVF9QU01fUEFSQU0gICAgIFBzbUNmZzsgICAgIC8qIFBzbcXk1sMgICAgICAgICAgICAgICovDQorI2VuZGlmDQorI2VuZGlmDQorfVRfT1NTX1BBUkFNOyAgICAgICAgICAgICAgICAgICAvKiDV+7j2T1NTtq/MrMXk1sPA4NDNICAqLw0KKw0KK3R5cGVkZWYgZW51bSANCit7DQorICAgIFNZU19SRVNFVF9UT19OT1JNQUwsDQorICAgIFNZU19SRVNFVF9UT19DSEFSR0VSLA0KKyAgICBTWVNfUkVTRVRfVE9fQUxSQU0sDQorICAgIFNZU19SRVNFVF9UT19FWENFUFRSRVNFVCwNCisgICAgU1lTX01BWF9SRVNFVF9UWVBFLA0KK30gVF9aT3NzU3lzX1JFU0VUX1RZUEU7DQorI2VuZGlmIC8vI2lmbmRlZiBET1hZR0VOX1NIT1VMRF9TS0lQX1RISVMNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUw0KKy8qIE9TQcSjv+mz9cq8u68gKi8NCitVSU5UMzIgT1NBX0luaXQoVk9JRCk7DQorDQorLyogz7XNs7ncwO3Eo7/pICovDQorVUlOVDMyIHpPc3NfSW5pdChWT0lEKTsNCitVSU5UMzIgek9zc19UYXNrSW5pdChWT0lEKTsNCitVSU5UMzIgek9zc19TdGFydChWT0lEKTsNCitWT0lEIHpPc3NfVGFza1N0YXJ0T0soVk9JRCk7DQorVUlOVDMyIHpPc3NfU3lzUG93ZXJkb3duKFZPSUQpOw0KK1ZPSUQgek9zc19TeXNTb2Z0UmVzZXQoVF9aT3NzU3lzX1JFU0VUX1RZUEUgdHlwZSk7DQorVF9PU1NfUEFSQU0gKnpPc3NfR2V0T3NzQ2ZnKFZPSUQpOw0KKw0KKy8qIMjOzvG53MDtxKO/6SAqLw0KK1VJTlQzMiB6T3NzX1Rhc2tfSG9va1NldChVSU5UOCB0eXBlLCBWT0lEICpIb29rRnVuYyk7DQorWk9TU19UQVNLX0lEIHpPc3NfQ3JlYXRlVGFzayhjb25zdCBDSEFSICp0YXNrX25hbWUsIEZVTkNfVEFTS0VOVFJZIHRhc2tfZW50cnksIFVJTlQzMiBzdGFja19zaXplLCBVSU5UMzIgcHJpb3JpdHksIFVJTlQzMiBwcml2YXRlX2RhdGFfbGVuLCBVSU5UOCBwbm8pOw0KK1VJTlQzMiB6T3NzX0RlbGV0ZVRhc2soWk9TU19UQVNLX0lEIHRhc2tfaWQpOw0KK1VJTlQzMiB6T3NzX0dldFRhc2tJbmZvKFpPU1NfVEFTS19JRCB0YXNrX2lkLCBUX1pPc3NfVENCICp0YXNrX2luZm8pOw0KK0NIQVIgKnpPc3NfR2V0VGFza05hbWUoWk9TU19UQVNLX0lEIHRhc2tfaWQpOw0KK1VJTlQzMiB6T3NzX0dldEFsbFRhc2tJRChaT1NTX1RBU0tfSUQgKnRhc2tfaWRfYXJyKTsNCitaT1NTX1RBU0tfSUQgek9zc19HZXRUYXNrSUQoY29uc3QgQ0hBUiAqdGFza19uYW1lKTsNCitaT1NTX1RBU0tfSUQgek9zc19HZXRTZWxmVGFza0lEKFZPSUQpOw0KK1VJTlQzMiB6T3NzX1NldFN0YXRlKFVJTlQ4IG5leHRfc3RhdGUpOw0KK1VJTlQzMiB6T3NzX1JlZ1Rhc2tTZW5kSG9vayhaT1NTX1RBU0tfSUQgdGFza19pZCwgVUlOVDggaG9va3R5cGUsIFVJTlQ4IGRpcmUsIFRBU0tfU0VORF9IT09LIGludGVyY2VwdF9FbnRyeSk7DQorVUlOVDMyIHpPc3NfVGFza1NlbmQoVUlOVDMyIG1zZ19pZCwgY29uc3QgVk9JRCAqbXNnX2J1ZiwgVUlOVDE2IG1zZ19sZW4sIFpPU1NfVEFTS19JRCB0YXNrX2lkKTsNCitVSU5UMzIgek9zc19UYXNrU2VuZERhdGEoVUlOVDMyIG1zZ19pZCwgVk9JRCAqYnVmLCBVSU5UMTYgbXNnX2xlbiwgWk9TU19UQVNLX0lEIHRhc2tfaWQpOw0KK1pPU1NfVEFTS19JRCB6T3NzX1NlbmRlcihWT0lEKTsNCisNCisvKiByYW1kdW1wICovDQorI2lmZGVmIF9VU0VfTVVMVElfQ09SRV9SQU1EVU1QDQorVk9JRCB6T3NzX1JhbWR1bXBTZXRPcGVyYXRpb24oVF96T3NzX1JhbWR1bXBPcHQgKmZ1bmNPYmpQdHIpOw0KK1ZPSUQgek9zc19SYW1kdW1wQ29uZmlndXJlTWVtKFRfek9zc19SYW1kdW1wUmVnaW9uICpyZWdpb25JbmZvKTsNCisjZWxzZQ0KK1ZPSUQgek9zc19SYW1kdW1wQ29uZmlndXJlTWVtKFVJTlQzMiBiYXNlLCBVSU5UMzIgc2l6ZSwgVUlOVDMyIG1hcF9iYXNlLCBVSU5UMzIgY29weV9iYXNlKTsNCitWT0lEIHpPc3NfUmFtZHVtcEhvb2tJbnN0YWxsKFRfek9zc19SYW1kdW1wSG9va0Z1bmMgaG9vayk7DQorI2VuZGlmDQorVk9JRCB6T3NzX1JhbWR1bXBTZXRJb09wdChUX3pPc3NfUmFtZHVtcElvT3B0IGhvb2spOw0KKw0KKy8qIE5WstnX973Tv9ogKi8NCitVSU5UMzIgek9zc19Odkl0ZW1Xcml0ZShVSU5UMzIgTnZJdGVtSUQsIFVJTlQ4ICpOdkl0ZW1EYXRhLCBVSU5UMzIgTnZJdGVtTGVuKTsNCitVSU5UMzIgek9zc19Odkl0ZW1SZWFkKFVJTlQzMiBOdkl0ZW1JRCwgVUlOVDggKk52SXRlbURhdGEsIFVJTlQzMiBOdkl0ZW1MZW4pOw0KK1VJTlQzMiB6T3NzX1Jlc2V0TlZGYWN0b3J5KFZPSUQpOw0KK1VJTlQzMiB6T3NzX052cmFtRmx1c2goVk9JRCk7DQorVk9JRCB6T3NzX052U2V0RXJyb3JBZGRyKFVJTlQzMiBhZGRyKTsNCitCT09MIHpPc3NfTnZJblJlc3VtZShWT0lEKTsNCitWT0lEIHpPc3NfTnZDaGVjayhWT0lEKTsNCitWT0lEIHpPc3NfTnZXcml0ZUZhY3RvcnkoVk9JRCk7DQorVk9JRCB6T3NzX052U2NhbkJhY2tVcEFyZWEoVk9JRCk7DQorVUlOVDMyIHpPc3NfTnZHZXRFY2NMb2dJbmZvKFRfWk9zc19OdkVjY0xvZyAqbG9nSW5mbyk7DQorVUlOVDMyIHpPc3NfQ2hhbmdlTnZyb0F0dHIoaW50IHdyaXRhYmxlKTsNCitVSU5UMzIgTnZyYW1fRmx1c2goVk9JRCk7DQorVUlOVDMyIE52cmFtX0ZpbmlzaChWT0lEKTsNCisNCisvKiBWU0lNstnX973Tv9ogKi8NCitVSU5UMzIgek9zc192U0lNSW5pdChWT0lEKTsNCitVSU5UMzIgek9zc192U0lNRGF0YVJlYWQoVUlOVDMyIGFkZHIsIFZPSUQgKmRhdGEsIFVJTlQzMiBsZW4pOw0KK1VJTlQzMiB6T3NzX3ZTSU1EYXRhV3JpdGUoVUlOVDMyIGFkZHIsIFZPSUQgKmRhdGEsIFVJTlQzMiBsZW4pOw0KK1VJTlQzMiB6T3NzX3ZTSU1GYWNXcml0ZShWT0lEICpkYXRhLCBVSU5UMzIgbGVuKTsNCitVSU5UMzIgek9zc192U0lNUmVjb3ZlcnkoVk9JRCk7DQorDQorLyogtPLToSAqLw0KK1VJTlQzMiB6VG9vbHNfUHJpbnRmKFVJTlQzMiBuTW9kTm8sIFVJTlQ4IG5QcmludExldmVsLCBjb25zdCBWT0lEICpwRm9ybWF0LCAuLi4pOw0KK1ZPSUQgek9zc19SYW1Mb2coQ0hBUiAqcmFtYnVmLCBVSU5UMzIgcmVzdHJpY3QpOw0KK1ZPSUQgek9zc19SYW1QcmludGYoVk9JRCk7DQorDQorLyogzqyy4iAqLw0KK1VJTlQzMiB6T3NzX0RlYnVnSW5mb1JlY29yZChVSU5UMzIgaWQsIGNvbnN0IFZPSUQgKnBGb3JtYXQsIC4uLik7DQorDQorLyogc2hlbGzEo7/pICovDQorVUlOVDMyIHpPc3NfQWRkU2hlbGxDbWQoY29uc3QgQ0hBUiAqY21kX25hbWUsIGNvbnN0IFNoZWxsX0Z1bmMgZnVuYywgY29uc3QgQ0hBUiAqZGVzY3JpcHRpb24pOw0KKw0KKy8qIL+0w8W5tyAqLw0KK1ZPSUQgek9zc19XYXRjaERvZ0VuYWJsZShCT09MIGVuYWJsZSk7DQorDQorLyogQ1JD0KPR6SAqLw0KK1VJTlQ4IENvbW1fQ3JjQ2FsYyhjb25zdCBVSU5UOCAqYnVmLCBVSU5UOCBsZW4pOw0KK1NJTlQzMiBDb21tX0NyY0NoZWNrKFVJTlQ4ICpidWYsIFVJTlQ4IGxlbiwgVUlOVDggY3JjKTsNCisNCisvKiC147XGxKO/6SAqLw0KK1ZPSUQgek9zc19TZXRUcmFuc0RhdGFGbGFnKFZPSUQpOw0KK0JPT0wgek9zc19HZXRUcmFuc0RhdGFGbGFnKFZPSUQpOw0KKw0KKy8qIMrCvP7X6SAqLw0KK1pPU1NfRVZFTlRfSUQgek9zc19DcmVhdGVFdmVudChjb25zdCBDSEFSICpuYW1lKTsNCitVSU5UMzIgek9zc19HZXRFdmVudChaT1NTX0VWRU5UX0lEIGV2ZW50SWQsIFVJTlQzMiBldmVudHMsIFVJTlQzMiBnZXRPcHRpb25zLCBVSU5UMzIgKnBFdmVudHNSZWNlaXZlZCwgVUlOVDMyIHRpbWVvdXQpOw0KK1VJTlQzMiB6T3NzX1NldEV2ZW50KFpPU1NfRVZFTlRfSUQgZXZlbnRJZCwgVUlOVDMyIGV2ZW50cywgVUlOVDMyIHNldE9wdGlvbnMpOw0KK1VJTlQzMiB6T3NzX0RlbGV0ZUV2ZW50KFpPU1NfRVZFTlRfSUQgZXZlbnRJZCk7DQorVUlOVDMyIHpPc3NfUXVlcnlFdmVudChaT1NTX0VWRU5UX0lEIGV2ZW50SWQpOw0KK0JPT0wgICB6T3NzX1dhaXRpbmdFdmVudChaT1NTX0VWRU5UX0lEIGV2ZW50SWQpOw0KKw0KKy8qILu30M67urPlICovIA0KK0JPT0wgek9zc19SaW5nSXNFbXB0eShUX1pPc3NfUmluZ0lkIHJpbmdfaWQpOyANCitCT09MIHpPc3NfUmluZ0lzRnVsbChUX1pPc3NfUmluZ0lkIHJpbmdfaWQpOw0KK1RfWk9zc19SaW5nSWQgek9zc19SaW5nQ3JlYXRlKFNJTlQzMiBuYnl0ZXMpOyANCitTSU5UMzIgek9zc19SaW5nQnVmR2V0KFRfWk9zc19SaW5nSWQgcmluZ19pZCwgQ0hBUiAqYnVmZmVyLCBTSU5UMzIgbWF4Ynl0ZXMpOyANCitTSU5UMzIgek9zc19SaW5nQnVmUHV0KFRfWk9zc19SaW5nSWQgcmluZ19pZCwgQ0hBUiAqYnVmZmVyLCBTSU5UMzIgbmJ5dGVzKTsNCitTSU5UMzIgek9zc19SaW5nRnJlZUJ5dGVzKFRfWk9zc19SaW5nSWQgcmluZ19pZCk7DQorU0lOVDMyIHpPc3NfUmluZ05CeXRlcyhUX1pPc3NfUmluZ0lkIHJpbmdfaWQpOw0KK1ZPSUQgek9zc19SaW5nRGVsZXRlKFRfWk9zc19SaW5nSWQgcmluZ19pZCk7DQorVk9JRCB6T3NzX1JpbmdGbHVzaChUX1pPc3NfUmluZ0lkIHJpbmdfaWQpOw0KK1ZPSUQgek9zc19SaW5nTW92ZUFoZWFkKFRfWk9zc19SaW5nSWQgcmluZ19pZCwgU0lOVDMyIG4pOw0KK1ZPSUQgek9zc19SaW5nUHV0QWhlYWQoVF9aT3NzX1JpbmdJZCByaW5nX2lkLCBDSEFSIGJ5dGUsIFNJTlQzMiBvZmZzZXQpOw0KKw0KKy8qIM/7z6K208HQICovDQorWk9TU19RVUVVRV9JRCB6T3NzX1F1ZXVlQ3JlYXRlKGNvbnN0IENIQVIgKnF1ZXVlX25hbWUsIFVJTlQzMiBtYXhNc2dzLCBVSU5UMzIgbWF4TXNnTGVuKTsNCitVSU5UMzIgek9zc19RdWV1ZVNlbmQoWk9TU19RVUVVRV9JRCBxdWV1ZV9pZCwgVk9JRCAqbXNnX3B0ciwgVUlOVDMyIHNpemUsIFVJTlQzMiB0aW1lb3V0LCBVSU5UMzIgcHJpb3JpdHkpOw0KK1VJTlQzMiB6T3NzX1F1ZXVlUmVjdihaT1NTX1FVRVVFX0lEIHF1ZXVlX2lkLCBWT0lEICpidWZmZXIsIFVJTlQzMiBtYXhzaXplLCBVSU5UMzIgdGltZW91dCk7DQorVUlOVDMyIHpPc3NfUXVldWVGcmVlQ291bnQoWk9TU19RVUVVRV9JRCBxdWV1ZV9pZCk7DQorVUlOVDMyIHpPc3NfUXVldWVEZWxldGUoWk9TU19RVUVVRV9JRCBxdWV1ZV9pZCk7DQorDQorLyogudy1wCAqLw0KK1VJTlQzMiB6T3NzX1BpcGVEZXZDcmVhdGUoY29uc3QgQ0hBUiAqbmFtZSwgU0lOVDMyIG5CeXRlcyk7DQorVUlOVDMyIHpPc3NfUGlwZURldkRlbGV0ZShjb25zdCBDSEFSICpuYW1lLCBCT09MIGZvcmNlKTsNCisNCisvKiBDYWhjZb3Tv9ogKi8NCitWT0lEIHpPc3NfQ2FjaGVDbGVhblJhbmdlKFVJTlQzMiBiYXNlLCBVSU5UMzIgc2l6ZSk7DQorVk9JRCB6T3NzX0NhY2hlSW52YWxpZGF0ZVJhbmdlKFVJTlQzMiBiYXNlLCBVSU5UMzIgc2l6ZSk7DQorVk9JRCB6T3NzX0NhY2hlQ2xlYW5SYW5nZUZhc3QoVUlOVDMyIGJhc2UsIFVJTlQzMiBzaXplKTsNCitWT0lEIHpPc3NfQ2FjaGVJbnZhbGlkYXRlUmFuZ2VGYXN0KFVJTlQzMiBiYXNlLCBVSU5UMzIgc2l6ZSk7DQorVk9JRCB6T3NzX0lvUmVtYXBQYWdlcyhWT0lEICpiYXNlLCBVSU5UMzIgc2l6ZSk7DQorDQorLyogc3bJ6NbDu/HIob3Tv9ogKi8NCitVSU5UOCB6T3NzX0dldFN2Q29uZmlnKFZPSUQpOw0KK1ZPSUQgek9zc19TZXRTdkNvbmZpZyhVSU5UOCBzdik7DQorDQorLyogtqjKscb3udzA7cSjv+kgKi8NCisjaWZkZWYgX1VTRV9QU00NCitWT0lEIHpPc3NfU2V0VGltZXJfUHNtRmxhZyhaT1NTX1RJTUVSX0lEIHRpbWVfaWQsIEJPT0wgRmxhZyk7DQorVUlOVDMyIHpPc3NfR2V0UHNfU2xlZXBUaW1lcihWT0lEKTsNCisjZW5kaWYNCisNCisjZW5kaWYgLy8jaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUw0KKw0KKy8qKg0KKyAqIEBicmllZiDJ6NbDt8fW3Mba0NTIzs7xtqjKscb3DQorICogQHBhcmFtIHRpbWVfbGVuICDI67LOo6zKsbOko6y1pc67o7ptcw0KKyAqIEBwYXJhbSBtc2dfaWQgICAgyOuyzqOstqjKsbW9uvMst6LLzbj4yejWw7aoyrHG98jOzvG1xM/7z6JpZA0KKyAqIEBwYXJhbSBhcmcgICAgICAgyOuyzqOsuL2807LOyv0stqi0q7XduPjIzs7xyOu/2rqvyv21xGJ1ZtDOss60y8qxbXNnX2xlbta1zqo0KHNpemVvZihVSU5UMzIvYXJnKSkNCisgKiBAcmV0dXJuILPJuaY6z+DTprXEtqjKscb3serKtjsgyqew3DpaT1NTX0lOVkFMSURfVElNRVJfSUQNCisgKiBAcmV0dmFsIFpPU1NfVElNRVJfSUTA4NDNtcSx6sq2ICAgILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfSU5WQUxJRF9USU1FUl9JRCAgICAgIMqnsNwNCisgKiBAbm90ZSAgyejWw8qxv8zOqrLOv7y14yy+rbn91ri2qMqxvOS68ywgz/LJ6NbDtqjKscb3tcTIzs7xt6LLzda4tqjP+8+isqLX1Lavys23xbaoyrHG98v51bzXytS0DQorICogQHdhcm5pbmcgILHY0OjU2sjOzvHE2rX308MNCisgKi8NCitaT1NTX1RJTUVSX0lEIHpPc3NfU2V0UmVsYXRpdmVUaW1lcihVSU5UMzIgdGltZV9sZW4sIFVJTlQzMiBtc2dfaWQsIFVJTlQzMiBhcmcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiDJ6NbDt8fW3Mba0NTIzs7xtqjKscb3z/LEv7HqyM7O8beiy83P+8+iDQorICogQHBhcmFtIHRpbWVfbGVuICAgICAgIMjrss6jrMqxs6SjrLWlzrujum1zDQorICogQHBhcmFtIG1zZ19pZCAgICAgICAgIMjrss6jrLaoyrG1vbrzLLeiy824+Mno1sO2qMqxxvfIzs7xtcTP+8+iaWQNCisgKiBAcGFyYW0gYXJnICAgICAgICAgICAgyOuyzqOsuL2807LOyv0stqi0q7XduPjIzs7xyOu/2rqvyv21xGJ1ZtDOss60y8qxbXNnX2xlbta1zqo0KHNpemVvZihVSU5UMzIvYXJnKSkNCisgKiBAcGFyYW0gZGVza190YXNrX2lkICAgyOuyzqOs1ri2qMS/serIzs7xo6zI57n7xL+x6sjOzvHOqr/VyrGjrL2rt6LLzcno1sO2qMqxxve1xMjOzvENCisgKiBAcmV0dXJuILPJuaY6z+DTprXEtqjKscb3serKtjsgyqew3DpaT1NTX0lOVkFMSURfVElNRVJfSUQNCisgKiBAcmV0dmFsIFpPU1NfVElNRVJfSUTA4NDNtcSx6sq2ICAgILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfSU5WQUxJRF9USU1FUl9JRCAgICAgIMqnsNwNCisgKiBAbm90ZSANCisgKiBAd2FybmluZyANCisgKi8NCitaT1NTX1RJTUVSX0lEIHpPc3NfU2V0UmVsYXRpdmVUaW1lckJ5VGFza0lkKFVJTlQzMiB0aW1lX2xlbiwgVUlOVDMyIG1zZ19pZCwgVUlOVDMyIGFyZywgWk9TU19UQVNLX0lEIGRlc2tfdGFza19pZCk7DQorDQorLyoqDQorICogQGJyaWVmIMno1sPW3Mba0NTIzs7xtqjKscb3DQorICogQHBhcmFtIHRpbWVfbGVuICDI67LOo6zKsbOko6y1pc67o7ptcw0KKyAqIEBwYXJhbSBtc2dfaWQgICAgyOuyzqOstqjKsbW9uvMst6LLzbj4yejWw7aoyrHG98jOzvG1xM/7z6JpZA0KKyAqIEBwYXJhbSBhcmcgICAgICAgyOuyzqOsuL2807LOyv0stqi0q7XduPjIzs7xyOu/2rqvyv21xGJ1ZtDOss60y8qxbXNnX2xlbta1zqo0KHNpemVvZihVSU5UMzIvYXJnKSkNCisgKiBAcmV0dXJuILPJuaY6z+DTprXEtqjKscb3serKtjsgyqew3DpaT1NTX0lOVkFMSURfVElNRVJfSUQNCisgKiBAcmV0dmFsIFpPU1NfVElNRVJfSUTA4NDNtcSx6sq2ICAgILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfSU5WQUxJRF9USU1FUl9JRCAgICAgIMqnsNwNCisgKiBAbm90ZSAgyejWw8qxv8zOqrLOv7y14yy+rbn91ri2qMqxvOS68ywgz/LJ6NbDtqjKscb3tcTIzs7xt6LLzda4tqjP+8+isqLX1Lavys23xbaoyrHG98v51bzXytS0DQorICogQHdhcm5pbmcgsdjQ6NTayM7O8cTatffTww0KKyAqLw0KK1pPU1NfVElNRVJfSUQgek9zc19TZXRMb29wVGltZXIoVUlOVDMyIHRpbWVfbGVuLCBVSU5UMzIgbXNnX2lkLCBVSU5UMzIgYXJnKTsNCisNCisvKioNCisgKiBAYnJpZWYgyejWw9bcxtrQ1MjOzvG2qMqxxvfP8sS/serIzs7xt6LLzc/7z6INCisgKiBAcGFyYW0gdGltZV9sZW4gICAgICAgyOuyzqOsyrGzpKOstaXOu6O6bXMNCisgKiBAcGFyYW0gbXNnX2lkICAgICAgICAgyOuyzqOstqjKsbW9uvMst6LLzbj4yejWw7aoyrHG98jOzvG1xM/7z6JpZA0KKyAqIEBwYXJhbSBhcmcgICAgICAgICAgICDI67LOo6y4vbzTss7K/Sy2qLSrtd24+MjOzvHI67/auq/K/bXEYnVm0M6yzrTLyrFtc2dfbGVu1rXOqjQoc2l6ZW9mKFVJTlQzMi9hcmcpKQ0KKyAqIEBwYXJhbSBkZXNrX3Rhc2tfaWQgICDI67LOo6zWuLaoxL+x6sjOzvGjrMjnufvEv7HqyM7O8c6qv9XKsaOsvau3osvNyejWw7aoyrHG97XEyM7O8Q0KKyAqIEByZXR1cm4gs8m5pjrP4NOmtcS2qMqxxvex6sq2OyDKp7DcOlpPU1NfSU5WQUxJRF9USU1FUl9JRA0KKyAqIEByZXR2YWwgWk9TU19USU1FUl9JRMDg0M21xLHqyrYgICAgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19JTlZBTElEX1RJTUVSX0lEICAgICAgyqew3A0KKyAqIEBub3RlICANCisgKiBAd2FybmluZyANCisgKi8NCitaT1NTX1RJTUVSX0lEIHpPc3NfU2V0TG9vcFRpbWVyQnlUYXNrSWQoVUlOVDMyIHRpbWVfbGVuLCBVSU5UMzIgbXNnX2lkLCBVSU5UMzIgYXJnLCBaT1NTX1RBU0tfSUQgZGVza190YXNrX2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgtLS9qLaoyrHG97qvyv0NCisgKiBAcGFyYW0gdG1fbmFtZSAgICAgICAgyOuyzqOstqjKscb3w/uzxg0KKyAqIEBwYXJhbSB0bV9jYWxsYmFjayAgICDI67LOo6y2qMqxtb2689Do0qq199PDtcS72LX3uq/K/Q0KKyAqIEBwYXJhbSB0bV9wYXJhbSAgICAgICDI67LOo6y72LX3uq/K/bXEyOuyzg0KKyAqIEBwYXJhbSBiUGVyaW9kICAgICAgICDI67LOo6xUUlVFo7rW3Mba0NS2qMqxxveju0ZBTFNFo7q3x9bcxtrQ1LaoyrHG9w0KKyAqIEByZXR1cm4gs8m5pjrP4NOmtcS2qMqxxvex6sq2OyDKp7DcOlpPU1NfSU5WQUxJRF9USU1FUl9JRA0KKyAqIEByZXR2YWwgWk9TU19USU1FUl9JRMDg0M21xLHqyrYgICAgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19JTlZBTElEX1RJTUVSX0lEICAgICAgyqew3A0KKyAqIEBub3RlICC0tL2ousPWrrrzv8nS1LX308N6T3NzX1N0YXJ0VGltZXIoKcb0tq+2qMqxxvcNCisgKiBAd2FybmluZyANCisgKi8NCitaT1NTX1RJTUVSX0lEIHpPc3NfQ3JlYXRlVGltZXIoY29uc3QgQ0hBUiAqdG1fbmFtZSwgWk9TU19USU1FUl9GVU4gdG1fY2FsbGJhY2ssIFNJTlQzMiB0bV9wYXJhbSwgQk9PTCBiUGVyaW9kKTsNCisNCisvKioNCisgKiBAYnJpZWYgxvS2r7aoyrHG97qvyv0sxvS2r8qxv8zOqrLOv7y14yy+rbn91ri2qMqxvOS68yy199PDu9i197qvyv0NCisgKiBAcGFyYW0gdGltZXJfaWQgICAgICAgIMjrss6jrLaoyrHG92lkDQorICogQHBhcmFtIHRpbWVfbGVuICAgICAgICDI67LOo6y2qMqxxvfKsbOko6y1pc67o7ptcw0KKyAqIEBwYXJhbSB0bV9jYWxsYmFjayAgICAgyOuyzqOstqjKsbW9uvPSqrX308O1xLvYtfe6r8r9DQorICogQHBhcmFtIHRtX3BhcmFtICAgICAgICDI67LOo6y72LX3uq/K/bXEyOuyzg0KKyAqIEByZXR1cm4gs8m5pjpaT1NTX1NVQ0NFU1M7yqew3FpPU1NfRVJST1INCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyAgICCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgICAgyqew3A0KKyAqIEBub3RlDQorICogQHdhcm5pbmcgIMjnufu72LX3uq/K/da00NDKsbzktPPT2raoyrHG98qxs6Qsv8nE3Lvh1OyzybTtzvO78raoyrHG97K7sbvV/ci3tfe2yA0KKyAqLw0KK1VJTlQzMiB6T3NzX1N0YXJ0VGltZXIoWk9TU19USU1FUl9JRCB0aW1lcl9pZCwgVUlOVDMyIHRpbWVfbGVuLCBaT1NTX1RJTUVSX0ZVTiB0bV9jYWxsYmFjaywgU0lOVDMyIHRtX3BhcmFtKTsNCisNCisvKioNCisgKiBAYnJpZWYgzaPWubaoyrHG97zGyrG6r8r9DQorICogQHBhcmFtIHRpbWVyX2lkICAgICAgICDI67LOo6y2qMqxxvdpZA0KKyAqIEByZXR1cm4gs8m5pjpaT1NTX1NVQ0NFU1M7yqew3FpPU1NfRVJST1INCisgKiBAcmV0dmFsIFpPU1NfU1VDQ0VTUyAgICCzybmmDQorICogQHJldHZhbCBaT1NTX0VSUk9SICAgICAgyqew3A0KKyAqIEBub3RlIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1VJTlQzMiB6T3NzX1N0b3BUaW1lcihaT1NTX1RJTUVSX0lEIHRpbWVyX2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYg1N3No9a4tqi2qMqxxve1xLzGyrENCisgKiBAcGFyYW0gdGltZXJfaWQgICAgICAgIMjrss6jrLaoyrHG92lkDQorICogQHJldHVybiCzybmmOlpPU1NfU1VDQ0VTUzvKp7DcWk9TU19FUlJPUg0KKyAqIEByZXR2YWwgWk9TU19TVUNDRVNTICAgILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfRVJST1IgICAgICDKp7DcDQorICogQG5vdGUgINTdzaO1xM2syrG8x8K8z8LKo9PgtcTP4LbUyrG85KOstffTw3pPc3NfUmVzdW1lVGltZSgpuq/K/brzvMzQ+LzGyrGjuw0KKyAgICAgICAgICAgICAgICDI57n7tqjKscb31f3U2rG7tfe2yCzU8ta00NDN6rWxx7C197bIuvPU3c2jvMbKsaGjDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfUGF1c2VUaW1lcihaT1NTX1RJTUVSX0lEIHRpbWVyX2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgyrnU3c2jtcS2qMqxxve8zND4vMbKsQ0KKyAqIEBwYXJhbSB0aW1lcl9pZCAgICAgICAgyOuyzqOstqjKscb3aWQNCisgKiBAcmV0dXJuILPJuaY6Wk9TU19TVUNDRVNTO8qnsNxaT1NTX0VSUk9SDQorICogQHJldHZhbCBaT1NTX1NVQ0NFU1MgICAgs8m5pg0KKyAqIEByZXR2YWwgWk9TU19FUlJPUiAgICAgIMqnsNwNCisgKiBAbm90ZSAgDQorICogQHdhcm5pbmcgDQorICovDQorVUlOVDMyIHpPc3NfUmVzdW1lVGltZXIoWk9TU19USU1FUl9JRCB0aW1lcl9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIMm+s/3WuLaotcS2qMqxxvcNCisgKiBAcGFyYW0gdGltZXJfaWQgICAgICAgIMjrss6jrLaoyrHG92lkDQorICogQHJldHVybiCzybmmOlpPU1NfU1VDQ0VTUzvKp7DcWk9TU19FUlJPUg0KKyAqIEByZXR2YWwgWk9TU19TVUNDRVNTICAgILPJuaYNCisgKiBAcmV0dmFsIFpPU1NfRVJST1IgICAgICDKp7DcDQorICogQG5vdGUgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK1VJTlQzMiB6T3NzX0tpbGxUaW1lcihaT1NTX1RJTUVSX0lEIHRpbWVyX2lkKTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgIElubGluZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUw0KKy8qIMurz/LBtLHtICovDQorI2lmIGRlZmluZWQgKF9PU19UT1MpIHx8IGRlZmluZWQgKF9PU19MSU5VWCkNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3D+7PGOiAgek9zc19MaXN0SW5pdA0KKyoguabE3MPoyvY6ICCz9cq8u6/Lq8/ywbSx7Q0KKyogss7K/cu1w/ejug0KKyAgICAgICAgICAgICAoSU4pDQorICAgICAgICAgICAgICAgIHBMaXN0OsG0se3WuNXrDQorICAgICAgICAgICAgIChPVVQpDQorKiC3tSC72CDWtToNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitzdGF0aWMgaW5saW5lIFZPSUQgek9zc19MaXN0SW5pdChUX1pPc3NfTGlzdCAqcExpc3QpDQorew0KKyAgICB6T3NzX0Fzc2VydEV4TihwTGlzdCAhPSBOVUxMKTsNCisNCisgICAgcExpc3QtPkhFQUQgID0gTlVMTDsNCisgICAgcExpc3QtPlRBSUwgID0gTlVMTDsNCisgICAgcExpc3QtPmNvdW50ID0gMDsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiC6r8r9w/uzxjogIHpPc3NfTGlzdENvdW50DQorKiC5psTcw+jK9jogILvxyKHBtLHtz8LX3LmytcS92rXjyv0NCisqILLOyv3LtcP3o7oNCisgICAgICAgICAgICAgKElOKQ0KKyAgICAgICAgICAgICAgICBwTGlzdDrBtLHt1rjV6w0KKyAgICAgICAgICAgICAoT1VUKQ0KKyogt7Ugu9gg1rU6ICC92rXjuPbK/Q0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3N0YXRpYyBpbmxpbmUgU0lOVDMyIHpPc3NfTGlzdENvdW50KFRfWk9zc19MaXN0ICpwTGlzdCkNCit7DQorICAgIHJldHVybiAocExpc3QtPmNvdW50KTsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiC6r8r9w/uzxjogek9zc19MaXN0RGVsZXRlDQorKiC5psTcw+jK9jog0saz/cG0se3W0Na4tqi1xL3ateMNCisqILLOyv3LtcP3o7oNCisgICAgICAgICAgICAoSU4pDQorICAgICAgICAgICAgICAgIHBMaXN0OsG0se3WuNXrDQorICAgICAgICAgICAgICAgIHBOb2RlOrT9yb6z/b3atePWuNXrDQorICAgICAgICAgICAgKE9VVCkNCisqILe1ILvYINa1Og0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3N0YXRpYyBpbmxpbmUgVk9JRCB6T3NzX0xpc3REZWxldGUoVF9aT3NzX0xpc3QgKnBMaXN0LCBUX1pPc3NfTm9kZSAqcE5vZGUpDQorew0KKyAgICBpZiAocE5vZGUtPnByZXZpb3VzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIHBOb2RlLT5wcmV2aW91cy0+bmV4dCA9IHBOb2RlLT5uZXh0Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcExpc3QtPkhFQUQgPSBwTm9kZS0+bmV4dDsNCisgICAgfQ0KKw0KKyAgICBpZiAocE5vZGUtPm5leHQgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcE5vZGUtPm5leHQtPnByZXZpb3VzID0gcE5vZGUtPnByZXZpb3VzOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcExpc3QtPlRBSUwgPSBwTm9kZS0+cHJldmlvdXM7DQorICAgIH0NCisNCisgICAgLyogdXBkYXRlIG5vZGUgY291bnQgKi8NCisgICAgcExpc3QtPmNvdW50LS07DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cP7s8Y6IHpPc3NfTGlzdEZpcnN0DQorKiC5psTcw+jK9jogu/HIocG0se21xMrXvdq14w0KKyogss7K/cu1w/ejug0KKyAgICAgICAgICAgIChJTikNCisgICAgICAgICAgICAgICAgcExpc3Q6wbSx7da41esNCisgICAgICAgICAgICAoT1VUKQ0KKyogt7Ugu9gg1rU6IL3atePWuNXrKLWxwbSx7dbQw7vT0L3atePKsaOst7W72L/VKQ0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3N0YXRpYyBpbmxpbmUgVF9aT3NzX05vZGUqIHpPc3NfTGlzdEZpcnN0KFRfWk9zc19MaXN0ICpwTGlzdCkNCit7DQorICAgIHJldHVybiAocExpc3QtPkhFQUQpOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3D+7PGOiB6T3NzX0xpc3RJbnNlcnQNCisqILmmxNzD6Mr2OiDP8sG0se3WuLaotcS92rXjuvOy5cjrvdq14w0KKyogss7K/cu1w/ejug0KKyAgICAgICAgICAgIChJTikNCisgICAgICAgICAgICAgICAgcExpc3Q6wbSx7da41esNCisgICAgICAgICAgICAgICAgcFByZXY6suXI67Xjvdq149a41eujrLWxcFByZXbOqr/VyrGjrLHtyr6y5cjrtb3BtLHtytfOu9bDDQorICAgICAgICAgICAgICAgIHBOb2RlOrT9suXI67XEvdq149a41esNCisgICAgICAgICAgICAoT1VUKQ0KKyogt7Ugu9gg1rU6DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorc3RhdGljIGlubGluZSBWT0lEIHpPc3NfTGlzdEluc2VydCAoVF9aT3NzX0xpc3QgKnBMaXN0LCBUX1pPc3NfTm9kZSAqcFByZXYsIFRfWk9zc19Ob2RlICpwTm9kZSkNCit7DQorICAgIFRfWk9zc19Ob2RlICpwTmV4dCA9IE5VTEw7DQorDQorICAgIGlmIChwUHJldiAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBwTmV4dCA9IHBQcmV2LT5uZXh0OyAgICAvKiBtYWtlIHByZXYgbm9kZSBwb2ludCBmd2QgdG8gbmV3ICovDQorICAgICAgICBwUHJldi0+bmV4dCA9IHBOb2RlOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgCXBOZXh0ID0gcExpc3QtPkhFQUQ7ICAgIC8qIG5ldyBub2RlIGlzIHRvIGJlIGZpcnN0IGluIGxpc3QgKi8NCisgICAgCXBMaXN0LT5IRUFEID0gcE5vZGU7DQorICAgIH0NCisNCisgICAgaWYgKHBOZXh0ICE9IE5VTEwpDQorICAgIHsgICAgCQ0KKyAgICAgICBwTmV4dC0+cHJldmlvdXMgPSBwTm9kZTsgLyogbWFrZSBuZXh0IG5vZGUgcG9pbnQgYmFjayB0byBuZXcgKi8NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHBMaXN0LT5UQUlMID0gcE5vZGU7ICAgIC8qIG5ldyBub2RlIGlzIHRvIGJlIGxhc3QgaW4gbGlzdCAqLw0KKyAgICB9DQorDQorICAgIC8qIHNldCBwb2ludGVycyBpbiBuZXcgbm9kZSwgYW5kIHVwZGF0ZSBub2RlIGNvdW50ICovDQorICAgIHBOb2RlLT5uZXh0ICAgICA9IHBOZXh0Ow0KKyAgICBwTm9kZS0+cHJldmlvdXMgPSBwUHJldjsNCisNCisgICAgcExpc3QtPmNvdW50Kys7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cP7s8Y6IHpPc3NfTGlzdEFkZA0KKyoguabE3MPoyvY6IM/ywbSx7c6yzO28073ateMNCisqILLOyv3LtcP3o7oNCisgICAgICAgICAgICAoSU4pDQorICAgICAgICAgICAgICAgIHBMaXN0OsG0se3WuNXrDQorICAgICAgICAgICAgICAgIHBOb2RlOrT9zO28073atePWuNXrDQorICAgICAgICAgICAgKE9VVCkNCisqILe1ILvYINa1Og0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3N0YXRpYyBpbmxpbmUgVk9JRCB6T3NzX0xpc3RBZGQgKFRfWk9zc19MaXN0ICpwTGlzdCwgVF9aT3NzX05vZGUgKnBOb2RlKQ0KK3sNCisgICAgek9zc19MaXN0SW5zZXJ0KHBMaXN0LCBwTGlzdC0+VEFJTCwgcE5vZGUpOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3D+7PGOiB6T3NzX0xpc3RMYXN0DQorKiC5psTcw+jK9jogu/HIoda4tqi92rXjtcS689K7vdq14w0KKyogss7K/cu1w/ejug0KKyAgICAgICAgICAgIChJTikNCisgICAgICAgICAgICAgICAgcE5vZGU61ri2qL3atePWuNXrDQorICAgICAgICAgICAgKE9VVCkNCisqILe1ILvYINa1OiC92rXj1rjV6yi1scG0se3W0MO709C92rXjyrGjrLe1u9i/1SkNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitzdGF0aWMgaW5saW5lIFRfWk9zc19Ob2RlKiB6T3NzX0xpc3RMYXN0KFRfWk9zc19MaXN0ICpwTGlzdCkNCit7DQorICAgIHJldHVybiAocExpc3QtPlRBSUwpOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3D+7PGOiB6T3NzX0xpc3ROZXh0DQorKiC5psTcw+jK9jogu/HIoda4tqi92rXjtcTHsNK7vdq14w0KKyogss7K/cu1w/ejug0KKyAgICAgICAgICAgIChJTikNCisgICAgICAgICAgICAgICAgcE5vZGU6vdq149a41esNCisgICAgICAgICAgICAoT1VUKQ0KKyogt7Ugu9gg1rU6IL3atePWuNXrKLWxtKvI673atePKx8G0se3X7rrz0ru49r3atePKsaOst7W72L/VKQ0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3N0YXRpYyBpbmxpbmUgVF9aT3NzX05vZGUqIHpPc3NfTGlzdE5leHQoVF9aT3NzX05vZGUgKnBOb2RlKQ0KK3sNCisgICAgcmV0dXJuIChwTm9kZS0+bmV4dCk7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cP7s8Y6IHpPc3NfTGlzdFByZXZpb3VzDQorKiC5psTcw+jK9jogu/HIoda4tqi92rXjtcTHsNK7vdq14w0KKyogss7K/cu1w/ejug0KKyAgICAgICAgICAgIChJTikNCisgICAgICAgICAgICAgICAgcE5vZGU61ri2qL3atePWuNXrDQorICAgICAgICAgICAgKE9VVCkNCisqILe1ILvYINa1OiC92rXj1rjV6yi1sbSryOu92rXjysfBtLHttdrSu7j2vdq148qxo6y3tbvYv9UpDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorc3RhdGljIGlubGluZSBUX1pPc3NfTm9kZSAqek9zc19MaXN0UHJldmlvdXMoVF9aT3NzX05vZGUgKnBOb2RlKQ0KK3sNCisgICAgcmV0dXJuIChwTm9kZS0+cHJldmlvdXMpOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3D+7PGOiB6T3NzX0xpc3ROU3RlcA0KKyoguabE3MPoyvY6ILvxyKHT69a4tqi92rXjvOS49G5TdGVwtcS92rXjDQorKiCyzsr9y7XD96O6DQorICAgICAgICAgICAgKElOKQ0KKyAgICAgICAgICAgICAgICBwTm9kZTq92rXj1rjV6w0KKyAgICAgICAgICAgICAgICBuU3RlcDq85Lj0yv0uINX9yv06sunV0m5leHS92rXjo6y4usr9sunV0nByZXZpb3Vzvdq14w0KKyAgICAgICAgICAgIChPVVQpDQorKiC3tSC72CDWtTogvdq149a41esotbHU2rzkuPRuU3RlcMTatb2078G0se3Ossqxo6y3tbvYv9UpDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorc3RhdGljIGlubGluZSBUX1pPc3NfTm9kZSAqek9zc19MaXN0TlN0ZXAoVF9aT3NzX05vZGUgKnBOb2RlLCBTSU5UMzIgblN0ZXApDQorew0KKyAgICBpbnQgaSAgICAgICA9IDA7DQorICAgIA0KKyAgICBpZiAoblN0ZXAgPiAwKQ0KKyAgICB7DQorICAgICAgICBmb3IgKGkgPSBuU3RlcDsgaSA+IDA7IGktLSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBwTm9kZSA9IHBOb2RlLT5uZXh0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChwTm9kZSA9PSBOVUxMKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZm9yIChpID0gblN0ZXA7IGkgPCAwOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgcE5vZGUgPSBwTm9kZS0+cHJldmlvdXM7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgaWYgKHBOb2RlID09IE5VTEwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIChwTm9kZSk7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoguq/K/cP7s8Y6IHpPc3NfTGlzdEZpbmQNCisqILmmxNzD6Mr2OiCy6dXSwbSx7dbQtcS92rXjDQorKiCyzsr9y7XD96O6DQorICAgICAgICAgICAgKElOKQ0KKyAgICAgICAgICAgICAgICBwTGlzdDrBtLHt1rjV6w0KKyAgICAgICAgICAgICAgICBwTm9kZTq0/bLp1dK92rXj1rjV6w0KKyAgICAgICAgICAgIChPVVQpDQorKiC3tSC72CDWtTogwbSx7dbQ09DWuLaovdq14zq92rXj1NrBtLHt1tC1xMv30v0otNMxv6rKvCmjrA0KKyAgICAgICAgICAgICAgICAgICAgICAgIMG0se3W0M7e1ri2qL3ateM6LTENCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitzdGF0aWMgaW5saW5lIFNJTlQzMiB6T3NzX0xpc3RGaW5kIChUX1pPc3NfTGlzdCAqcExpc3QsIFRfWk9zc19Ob2RlICpwTm9kZSkNCit7DQorICAgIFRfWk9zc19Ob2RlICpwTmV4dE5vZGUgICAgICA9IE5VTEw7DQorICAgIGludCAgICAgICAgIGlOb2RlUG9zaXRpb24gICA9IDE7DQorDQorICAgIHBOZXh0Tm9kZSA9IHpPc3NfTGlzdEZpcnN0IChwTGlzdCk7DQorDQorICAgIHdoaWxlICgocE5leHROb2RlICE9IE5VTEwpICYmIChwTmV4dE5vZGUgIT0gcE5vZGUpKQ0KKyAgICB7DQorICAgICAgICBpTm9kZVBvc2l0aW9uKys7DQorICAgICAgICANCisgICAgICAgIHBOZXh0Tm9kZSA9IHpPc3NfTGlzdE5leHQgKHBOZXh0Tm9kZSk7DQorICAgIH0NCisNCisgICAgaWYgKHBOZXh0Tm9kZSAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKGlOb2RlUG9zaXRpb24pOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuICgtMSk7DQorICAgIH0NCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiC6r8r9w/uzxjogek9zc19MaXN0Q29ubmVjdA0KKyoguabE3MPoyvY6IL2rwb249sG0se3BtL3T1NrSu8bwDQorKiCyzsr9y7XD96O6DQorICAgICAgICAgICAgKElOKQ0KKyAgICAgICAgICAgICAgICBwTGlzdDE6IMG0se0xDQorICAgICAgICAgICAgICAgIHBMaXN0MjogwbSx7TINCisgICAgICAgICAgICAoT1VUKQ0KKyogt7W72Na1Og0KKyogy7XD96O6ICAgIL2rcExpc3QywbS907W9cExpc3QxzrKyv6O7cExpc3QytcTBtLHtzbfE2sjdsru74bjEseQNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitzdGF0aWMgaW5saW5lIFZPSUQgek9zc19MaXN0Q29ubmVjdChUX1pPc3NfTGlzdCAqcExpc3QxLCBUX1pPc3NfTGlzdCAqcExpc3QyKQ0KK3sNCisgICAgaWYgKHBMaXN0MS0+Y291bnQgPT0gMCkNCisgICAgew0KKyAgICAgICAgcExpc3QxLT5IRUFEICAgID0gcExpc3QyLT5IRUFEOw0KKyAgICAgICAgcExpc3QxLT5UQUlMICAgID0gcExpc3QyLT5UQUlMOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKHBMaXN0Mi0+Y291bnQgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBwTGlzdDEtPlRBSUwgLT5uZXh0ICAgICA9IHBMaXN0Mi0+SEVBRDsNCisgICAgICAgICAgICBwTGlzdDItPkhFQUQtPnByZXZpb3VzICA9IHBMaXN0MS0+VEFJTDsNCisgICAgICAgICAgICBwTGlzdDEtPlRBSUwgICAgICAgICAgICA9IHBMaXN0Mi0+VEFJTDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBwTGlzdDEtPmNvdW50ICs9IHBMaXN0Mi0+Y291bnQ7DQorfQ0KKyNlbHNlDQorVk9JRCB6T3NzX0xpc3RJbml0KFRfWk9zc19MaXN0ICpwTGlzdCk7DQorVF9aT3NzX05vZGUgKnpPc3NfTGlzdEZpcnN0KFRfWk9zc19MaXN0ICpwTGlzdCk7DQorVF9aT3NzX05vZGUgKnpPc3NfTGlzdExhc3QoVF9aT3NzX0xpc3QgKnBMaXN0KTsNCitUX1pPc3NfTm9kZSAqek9zc19MaXN0TmV4dChUX1pPc3NfTm9kZSAqcE5vZGUpOw0KK1RfWk9zc19Ob2RlICp6T3NzX0xpc3RQcmV2aW91cyhUX1pPc3NfTm9kZSAqcE5vZGUpOw0KK1RfWk9zc19Ob2RlICp6T3NzX0xpc3ROU3RlcChUX1pPc3NfTm9kZSAqcE5vZGUsIFNJTlQzMiBuU3RlcCk7IA0KK1NJTlQzMiB6T3NzX0xpc3RDb3VudChUX1pPc3NfTGlzdCAqcExpc3QpOyANCitTSU5UMzIgek9zc19MaXN0RmluZChUX1pPc3NfTGlzdCAqcExpc3QsIFRfWk9zc19Ob2RlICpwTm9kZSk7DQorVk9JRCB6T3NzX0xpc3RBZGQoVF9aT3NzX0xpc3QgKnBMaXN0LCBUX1pPc3NfTm9kZSAqcE5vZGUpOw0KK1ZPSUQgek9zc19MaXN0RGVsZXRlKFRfWk9zc19MaXN0ICpwTGlzdCwgVF9aT3NzX05vZGUgKnBOb2RlKTsNCitWT0lEIHpPc3NfTGlzdEluc2VydChUX1pPc3NfTGlzdCAqcExpc3QsIFRfWk9zc19Ob2RlICpwUHJldiwgVF9aT3NzX05vZGUgKnBOb2RlKTsNCitWT0lEIHpPc3NfTGlzdENvbm5lY3QoVF9aT3NzX0xpc3QgKnBMaXN0MSwgVF9aT3NzX0xpc3QgKnBMaXN0Mik7DQorI2VuZGlmDQorDQorI2VuZGlmIC8vI2lmbmRlZiBET1hZR0VOX1NIT1VMRF9TS0lQX1RISVMNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvLyAjaWZuZGVmIF9PU1NfU1VQX0gNCmRpZmYgLS1naXQgYS9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3RyYWNlLmggYi9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlN2I3YgotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9vc3NfdHJhY2UuaApAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAxMiBaVEUgQ29ycG9yYXRpb24uDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogxKMgv+kgw/sgOiBQOThDX09TUw0KKyogzsQgvP4gw/sgOiBvc3NfdHJhY2UuaA0KKyogz+C52M7EvP4gOiANCisqIMq1z9a5psTcIDoguPrX2bmmxNy1xM23zsS8/g0KKyog1/cgICAg1d8gOiBjaGVueGluZ2ZhbmcNCisqILDmICAgILG+IDogVjEuMA0KKyogzeqzycjVxtogOiAyMDEyLTA3LTMwDQorKiDG5Mv8y7XD9yA6IA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyog0N64xLzHwrwNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZuZGVmIF9PU1NfVFJBQ0VfSA0KKyNkZWZpbmUgX09TU19UUkFDRV9IDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAjaW5jbHVkZcf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIg0KK3sNCisjZW5kaWYNCisgICAgDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiCzo8G/tqjS5cf4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2lmIGRlZmluZWQgKF9PU19PU0UpIHx8IGRlZmluZWQgKF9PU19UT1MpDQorIyBkZWZpbmUgT1NTX1RSQUNFX0ZVTkMNCisjIGRlZmluZSBPU1NfVFJBQ0VfVEhSRUFEDQorI2VuZGlmDQorDQorI2lmbmRlZiBfT1NfV0lODQorI2lmIGRlZmluZWQgT1NTX1RSQUNFX0ZVTkMNCisjIGRlZmluZSBaT1NTX1RSQUNFX0ZVTkNfU1RBUlQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICBzdGF0aWMgVk9JRCAqdGQgPSBOVUxMOyAvKiBUcmFjZSBEZXNjcmlwdG9yICovICAgICAgICAgIFwNCisgICAgICAgIG9zc190cmFjZV9mdW5jX3N0YXJ0KCZ0ZCwgX19GVU5DVElPTl9fKTsNCisNCisjIGRlZmluZSBaT1NTX1RSQUNFX0ZVTkNfRU5EKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgb3NzX3RyYWNlX2Z1bmNfZW5kKHRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIH0NCisNCisjIGRlZmluZSBaT1NTX1RSQUNFX0ZVTkNfU1RBUlRfQUxXQVlTKCkgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICBWT0lEICp0ZCA9IE5VTEw7ICAgICAgICAvKiBUcmFjZSBEZXNjcmlwdG9yICovICAgICAgICAgIFwNCisgICAgICAgIG9zc190cmFjZV9mdW5jX3N0YXJ0KCZ0ZCwgX19GVU5DVElPTl9fKTsNCisNCisjIGRlZmluZSBaT1NTX1RSQUNFX0ZVTkNfRU5EX0FMV0FZUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgb3NzX3RyYWNlX2Z1bmNfZW5kKHRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIH0NCisjZWxzZQ0KKyMgZGVmaW5lIFpPU1NfVFJBQ0VfRlVOQ19TVEFSVCgpDQorIyBkZWZpbmUgWk9TU19UUkFDRV9GVU5DX0VORCgpDQorDQorIyBkZWZpbmUgWk9TU19UUkFDRV9GVU5DX1NUQVJUX0FMV0FZUygpDQorIyBkZWZpbmUgWk9TU19UUkFDRV9GVU5DX0VORF9BTFdBWVMoKQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogyv2+3b3hubm2qNLlx/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqILqvyv3J+cP3x/gNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZkZWYgT1NTX1RSQUNFX0ZVTkMNCitWT0lEIG9zc190cmFjZV90aHJlYWRfb3BlbihWT0lEKTsNCitWT0lEIG9zc190cmFjZV90aHJlYWRfY2xvc2UoVk9JRCk7DQorI2VuZGlmDQorDQorVk9JRCB6T3NzX1RyYWNlRnVuY0luaXQoVk9JRCk7DQorVk9JRCB6T3NzX1RyYWNlRnVuY0luZm8oQ0hBUiAqZnVuY19uYW1lKTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIMirvtax5MG/yfnD98f4DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAgLyogX09TU19UUkFDRV9IICovDQorDQpkaWZmIC0tZ2l0IGEvY3AvcHMvcGxhdC9pbmMvb3NzL3JhbWR1bXAuaCBiL2NwL3BzL3BsYXQvaW5jL29zcy9yYW1kdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzZmZkYQotLS0gL2Rldi9udWxsCisrKyBiL2NwL3BzL3BsYXQvaW5jL29zcy9yYW1kdW1wLmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogsObIqMv509AgKEMpMjAxNiwg1tDQy82o0ba5ybfd09DP3rmry76howorKiAKKyogzsS8/sP7s8Y6ICAgICByYW1kdW1wLmgKKyogzsS8/rHqyrY6ICAgICByYW1kdW1wLmgKKyogxNrI3dWq0qo6ICAgICByYW1kdW1wttTN4szhuanNt87EvP4KKyogyrnTw7e9t6g6ICAgICAjaW5jbHVkZSAicmFtZHVtcC5oIgorKiAKKyog0N64xMjVxtogICAgICAgILDmsb66xSAgICAgINDeuMSx6rzHICAgICAgICDQ3rjEyMsgICAgICAgICAg0N64xMTayN0KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIDIwMTYvMy8xMCAgICAgIFYxLjAgICAgICAgIENyZWF0ZSAgICAgICAgICAg1dS+/L/8ICAgICAgICAgILS0vagKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SQU1EVU1QX0gKKyNkZWZpbmUgX1JBTURVTVBfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzbfOxLz+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDN4rK/uq/K/cn5w/cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgILrqtqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyv2+3cDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGludCAoKnJhbWR1bXBfY2FsbGJhY2tfdCkodm9pZCk7CisKKy8qIFJBTURVTVBfRkxBR19YWFggICAgICAgICAqLworZW51bQoreworICAgIFJBTURVTVBfRkxBR19OT05FICAgICAgICAgICA9IDB4MDAsIC8qIGRlZmF1bHQgICAgICAgICAgICAgICAgICAqLworICAgIFJBTURVTVBfRkxBR19ORUVEX0NPUFkgICAgICA9IDB4MDEsIC8qIENvcHkgZGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgIFJBTURVTVBfRkxBR19IQVNfRVhURVJOQUwgICA9IDB4MDIsIC8qIEV4dGVybmFsIGFkZHJlc3MgICAgICAgICAqLworICAgIFJBTURVTVBfRkxBR19IQVNfQ0FMTEJBQ0sgICA9IDB4MDQsIC8qIENhbGxiYWNrIGZ1bnRpb24gICAgICAgICAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMirvtax5MG/yfnD9yAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyKu+1rqvyv3J+cP3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZCAoQ09ORklHX1JBTURVTVApIHx8IGRlZmluZWQgKF9VU0VfQ0xJRU5UX1JBTURVTVApCitleHRlcm4gdm9pZCByYW1kdW1wX3JhbV9jb25mX3RhYmxlX2FkZCgKKyAgICAgICAgY2hhciAqcmFtX25hbWUsIAorICAgICAgICB1bnNpZ25lZCBsb25nIHJhbV9waHksIAorICAgICAgICB1bnNpZ25lZCBsb25nIHJhbV9zaXplLCAKKyAgICAgICAgdW5zaWduZWQgbG9uZyByYW1fdmlydCwKKyAgICAgICAgdW5zaWduZWQgbG9uZyByYW1fZmxhZywKKyAgICAgICAgdW5zaWduZWQgbG9uZyByYW1fZXh0cmEpOworI2Vsc2UKK3N0YXRpYyB2b2lkIHJhbWR1bXBfcmFtX2NvbmZfdGFibGVfYWRkKAorICAgICAgICBjaGFyICpyYW1fbmFtZSwgCisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmFtX3BoeSwgCisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmFtX3NpemUsIAorICAgICAgICB1bnNpZ25lZCBsb25nIHJhbV92aXJ0LAorICAgICAgICB1bnNpZ25lZCBsb25nIHJhbV9mbGFnLAorICAgICAgICB1bnNpZ25lZCBsb25nIHJhbV9leHRyYSkKK3sKKyAgICA7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMTawaq6r8r9yrXP1iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYgIC8vI2lmbmRlZiBfUkFNRFVNUF9ICisK