gASVjgIBAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIwsbW9kdWxlLWV0aGVyZXVtLnBhcmlzLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UYYwHY2xhc3Nlc5RdlIwFbmFtZXOUXZSMCGR1cG5hbWVzlF2UjAhiYWNrcmVmc5RdlIwFaXNtb2SUiHWMB3RhZ25hbWWUaAmMBnNvdXJjZZSMbS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vcGFyaXMvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3SUjARsaW5llEsBjAZwYXJlbnSUaAOMCV9kb2N1bWVudJRoA3VijA9zcGhpbnguYWRkbm9kZXOUjAVpbmRleJSTlCmBlH2UKGgFaAZoB12UaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwHZW50cmllc5RdlCiMBHBhaXKUjC1tb2R1bGU7IGV0aGVyZXVtLnBhcmlzLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4aB1oHmgfSwRo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dC5hdXRvc3VtbWFyeZSMEWF1dG9zdW1tYXJ5X3RhYmxllJOUKYGUfZQoaAVYjQIAAAoKCgpnZW5lcmljX2NyZWF0ZQoKQ29yZSBsb2dpYyB1c2VkIGJ5IHRoZSBDUkVBVEUqIGZhbWlseSBvZiBvcGNvZGVzLgoKY3JlYXRlCgpDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUuCgpjcmVhdGUyCgpDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUuCgpyZXR1cm5fCgpIYWx0cyBleGVjdXRpb24gcmV0dXJuaW5nIG91dHB1dCBkYXRhLgoKZ2VuZXJpY19jYWxsCgpQZXJmb3JtIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBDQUxMKiBmYW1pbHkgb2Ygb3Bjb2Rlcy4KCmNhbGwKCk1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQuCgpjYWxsY29kZQoKTWVzc2FnZS1jYWxsIGludG8gdGhpcyBhY2NvdW50IHdpdGggYWx0ZXJuYXRpdmUgYWNjb3VudOKAmXMgY29kZS4KCnNlbGZkZXN0cnVjdAoKSGFsdCBleGVjdXRpb24gYW5kIHJlZ2lzdGVyIGFjY291bnQgZm9yIGxhdGVyIGRlbGV0aW9uLgoKZGVsZWdhdGVjYWxsCgpNZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LgoKc3RhdGljY2FsbAoKTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC4KCnJldmVydAoKU3RvcCBleGVjdXRpb24gYW5kIHJldmVydCBzdGF0ZSBjaGFuZ2VzLCB3aXRob3V0IGNvbnN1bWluZyBhbGwgcHJvdmlkZWQgZ2FzlGgHXZRoAIwFdGFibGWUk5QpgZR9lChoBWgGaAddlGgAjAZ0Z3JvdXCUk5QpgZR9lChoBWgGaAddlChoAIwHY29sc3BlY5STlCmBlH2UKGgFaAZoB12UaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwIY29sd2lkdGiUSwp1aBxq/QIAAGgdTmgfTmggavoCAAB1Ymr+AgAAKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhjb2x3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bGNvZGWUhZSBlH2UKGgFaAZoIGo+BQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqNQMAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGopAwAAaB1OaB9OaCBqOwUAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIwuZXRoZXJldW0ucGFyaXMudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jYWxsY29kZZSMCHJlZnRpdGxllIwuZXRoZXJldW0ucGFyaXMudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jYWxsY29kZZR1aBxobWgdTmgfTmggajcFAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYx+L2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9wYXJpcy92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDo0MTo8YXV0b3N1bW1hcnk+lGgfSwFoIGo0BQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGodAwAAaB1OaB9OaCBqMQUAAHViah4DAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMQU1lc3NhZ2UtY2FsbCBpbnRvIHRoaXMgYWNjb3VudCB3aXRoIGFsdGVybmF0aXZlIGFjY291bnTigJlzIGNvZGUulGgHXZRoP4xBTWVzc2FnZS1jYWxsIGludG8gdGhpcyBhY2NvdW50IHdpdGggYWx0ZXJuYXRpdmUgYWNjb3VudOKAmXMgY29kZS6UhZSBlH2UKGgFaAZoIGpoBQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mfi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vcGFyaXMvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6NDE6PGF1dG9zdW1tYXJ5PpRoH0sBaCBqZQUAAHViYWgOfZQoaBBdlGgTXZRo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LAogICAgbWVtb3J5X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgICMgVGhpcyBpbXBvcnQgY2F1c2VzIGEgY2lyY3VsYXIgaW1wb3J0IGVycm9yCiAgICAjIGlmIGl0J3Mgbm90IG1vdmVkIGluc2lkZSB0aGlzIG1ldGhvZAogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UKCiAgICBldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmFkZChjb250cmFjdF9hZGRyZXNzKQoKICAgIGNyZWF0ZV9tZXNzYWdlX2dhcyA9IG1heF9tZXNzYWdlX2NhbGxfZ2FzKFVpbnQoZXZtLmdhc19sZWZ0KSkKICAgIGV2bS5nYXNfbGVmdCAtPSBVMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcykKCiAgICBlbnN1cmUobm90IGV2bS5tZXNzYWdlLmlzX3N0YXRpYywgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKCiAgICBzZW5kZXJfYWRkcmVzcyA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBzZW5kZXIgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBzZW5kZXJfYWRkcmVzcykKCiAgICBpZiAoCiAgICAgICAgc2VuZGVyLmJhbGFuY2UgPCBlbmRvd21lbnQKICAgICAgICBvciBzZW5kZXIubm9uY2UgPT0gVWludCgyKio2NCAtIDEpCiAgICAgICAgb3IgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQKICAgICk6CiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGNyZWF0ZV9tZXNzYWdlX2dhcwogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGlmIGFjY291bnRfaGFzX2NvZGVfb3Jfbm9uY2UoZXZtLmVudi5zdGF0ZSwgY29udHJhY3RfYWRkcmVzcyk6CiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCgogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIHRhcmdldD1CeXRlczAoKSwKICAgICAgICBnYXM9VTI1NihjcmVhdGVfbWVzc2FnZV9nYXMpLAogICAgICAgIHZhbHVlPWVuZG93bWVudCwKICAgICAgICBkYXRhPWIiIiwKICAgICAgICBjb2RlPWNhbGxfZGF0YSwKICAgICAgICBjdXJyZW50X3RhcmdldD1jb250cmFjdF9hZGRyZXNzLAogICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICBjb2RlX2FkZHJlc3M9Tm9uZSwKICAgICAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU9VHJ1ZSwKICAgICAgICBpc19zdGF0aWM9RmFsc2UsCiAgICAgICAgYWNjZXNzZWRfYWRkcmVzc2VzPWV2bS5hY2Nlc3NlZF9hZGRyZXNzZXMuY29weSgpLAogICAgICAgIGFjY2Vzc2VkX3N0b3JhZ2Vfa2V5cz1ldm0uYWNjZXNzZWRfc3RvcmFnZV9rZXlzLmNvcHkoKSwKICAgICkKICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGNoaWxkX2V2bS5vdXRwdXQKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KSkKlGgHXZQoaD+MjmRlZiBnZW5lcmljX2NyZWF0ZSgKICAgIGV2bTogRXZtLAogICAgZW5kb3dtZW50OiBVMjU2LAogICAgY29udHJhY3RfYWRkcmVzczogQWRkcmVzcywKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9zaXplOiBVMjU2LAqUhZSBlH2UKGgFaAZoIGorCAAAaCFoA2gdaERoH0sAdWJqTQcAACmBlH2UKGgFaAZoB12UaD+MFWluaXRfY29kZV9nYXM6IFVpbnQsCpSFlIGUfZQoaAVoBmggajMIAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZRoF12UaBldlHVoHGpMBwAAaCBqKwgAAGghaANoHWhEaB9LAHViaD+MiSkgLT4gTm9uZToKICAgICMgVGhpcyBpbXBvcnQgY2F1c2VzIGEgY2lyY3VsYXIgaW1wb3J0IGVycm9yCiAgICAjIGlmIGl0J3Mgbm90IG1vdmVkIGluc2lkZSB0aGlzIG1ldGhvZAogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQglIWUgZR9lChoBWgGaCBqKwgAAGghaANoHWhEaB9LAHViak0HAAApgZR9lChoBWgGaAddlGg/jCEoCiAgICAgICAgTUFYX0NPREVfU0laRSwKICAgICAgICCUhZSBlH2UKGgFaAZoIGpFCAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqTAcAAGggaisIAABoIWgDaB1oRGgfSwB1Ymg/jBNTVEFDS19ERVBUSF9MSU1JVCwglIWUgZR9lChoBWgGaCBqKwgAAGghaANoHWhEaB9LAHViak0HAAApgZR9lChoBWgGaAddlGg/jBZwcm9jZXNzX2NyZWF0ZV9tZXNzYWdllIWUgZR9lChoBWgGaCBqVwgAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMD2NoYW5nZS1yZXBsYWNlZJRhaBVdlGgXXZRoGV2UdWgcakwHAABoIGorCAAAaCFoA2gdaERoH0sAdWJqTQcAACmBlH2UKGgFaAZoB12UaD+MHXByb2Nlc3NfY3JlYXRlX21lc3NhZ2UsCiAgICAplIWUgZR9lChoBWgGaCBqZQgAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMEmNoYW5nZS1yZXBsYWNlbWVudJRhaBVdlGgXXZRoGV2UdWgcakwHAABoIGorCAAAaCFoA2gdaERoH0sAdWJoP1hpAwAACgogICAgZXZtLmFjY2Vzc2VkX2FkZHJlc3Nlcy5hZGQoY29udHJhY3RfYWRkcmVzcykKCiAgICBjcmVhdGVfbWVzc2FnZV9nYXMgPSBtYXhfbWVzc2FnZV9jYWxsX2dhcyhVaW50KGV2bS5nYXNfbGVmdCkpCiAgICBldm0uZ2FzX2xlZnQgLT0gVTI1NihjcmVhdGVfbWVzc2FnZV9nYXMpCgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMsIFdyaXRlSW5TdGF0aWNDb250ZXh0KQogICAgZXZtLnJldHVybl9kYXRhID0gYiIiCgogICAgc2VuZGVyX2FkZHJlc3MgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgc2VuZGVyID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgc2VuZGVyX2FkZHJlc3MpCgogICAgaWYgKAogICAgICAgIHNlbmRlci5iYWxhbmNlIDwgZW5kb3dtZW50CiAgICAgICAgb3Igc2VuZGVyLm5vbmNlID09IFVpbnQoMioqNjQgLSAxKQogICAgICAgIG9yIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUCiAgICApOgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBjcmVhdGVfbWVzc2FnZV9nYXMKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICByZXR1cm4KCiAgICBpZiBhY2NvdW50X2hhc19jb2RlX29yX25vbmNlKGV2bS5lbnYuc3RhdGUsIGNvbnRyYWN0X2FkZHJlc3MpOgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICByZXR1cm4KCiAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICAplIWUgZR9lChoBWgGaCBqKwgAAGghaANoHWhEaB9LAHViak0HAAApgZR9lChoBWgGaAddlGg/jEAKCiAgICBlbnN1cmUobGVuKGNhbGxfZGF0YSkgPD0gMiAqIE1BWF9DT0RFX1NJWkUsIE91dE9mR2FzRXJyb3IplIWUgZR9lChoBWgGaCBqdwgAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcakwHAABoIGorCAAAaCFoA2gdaERoH0sAdWJoP1i4AwAACgogICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQoKICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgIGNhbGxlcj1ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICB0YXJnZXQ9Qnl0ZXMwKCksCiAgICAgICAgZ2FzPVUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKSwKICAgICAgICB2YWx1ZT1lbmRvd21lbnQsCiAgICAgICAgZGF0YT1iIiIsCiAgICAgICAgY29kZT1jYWxsX2RhdGEsCiAgICAgICAgY3VycmVudF90YXJnZXQ9Y29udHJhY3RfYWRkcmVzcywKICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgY29kZV9hZGRyZXNzPU5vbmUsCiAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPVRydWUsCiAgICAgICAgaXNfc3RhdGljPUZhbHNlLAogICAgICAgIGFjY2Vzc2VkX2FkZHJlc3Nlcz1ldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmNvcHkoKSwKICAgICAgICBhY2Nlc3NlZF9zdG9yYWdlX2tleXM9ZXZtLmFjY2Vzc2VkX3N0b3JhZ2Vfa2V5cy5jb3B5KCksCiAgICApCiAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCgogICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gYiIiCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYuZnJvbV9iZV9ieXRlcyhjaGlsZF9ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkpCpSFlIGUfZQoaAVoBmggaisIAABoIWgDaB1oRGgfSwB1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUjF4vaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL3NyYy9ldGhlcmV1bS9wYXJpcy92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGq0AgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UjAtsaW5lbm9zdGFydJRLAXOMB2xpbmVub3OUiXVoHGopCAAAaB1oHmgf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c3RhY2spLnRvX2JlX2J5dGVzMzIoKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCiAgICBjYWxsX2RhdGFfd29yZHMgPSBjZWlsMzIoVWludChtZW1vcnlfc2l6ZSkpIC8vIDMyCiAgICBjaGFyZ2VfZ2FzKAogICAgICAgIGV2bSwKICAgICAgICBHQVNfQ1JFQVRFICsgR0FTX0tFQ0NBSzI1Nl9XT1JEICogY2FsbF9kYXRhX3dvcmRzICsgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgKQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgY29udHJhY3RfYWRkcmVzcyA9IGNvbXB1dGVfY3JlYXRlMl9jb250cmFjdF9hZGRyZXNzKAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIHNhbHQsCiAgICAgICAgbWVtb3J5X3JlYWRfYnl0ZXMoZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSksCiAgICApCgogICAgZ2VuZXJpY19jcmVhdGUoCiAgICAgICAgZXZtLCBlbmRvd21lbnQsIGNvbnRyYWN0X2FkZHJlc3MsIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZQoaD9YdwEAAGRlZiBjcmVhdGUyKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZW5kb3dtZW50ID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBzYWx0ID0gcG9wKGV2bS5z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WAcCAABkZWYgcmV0dXJuXyhldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKV0KICAgICkKCiAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1pFUk8gKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBldm0ub3V0cHV0ID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgKQoKICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUhZSBlH2UKGgFaAZoIGoDDAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllIxeL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vcGFyaXMvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS5weZSMCXhtbDpzcGFjZZRqtAIAAIwFZm9yY2WUiYwIbGFuZ3VhZ2WUjAZweXRob26UjA5oaWdobGlnaHRfYXJnc5R9lGqXCAAASwFzjAdsaW5lbm9zlIl1aBxqKQgAAGgdaB5oH0tyaCBqLAsAAHViZWgOfZQoaBBdlGpyAQAAYWgTXZRoFV2UjAZyZXR1cm6UYWgXXZRoGV2UdWgcaDNoHWgeaB9LZWggavMGAABoIWgDdWJoNCmBlH2UKGgFaAZoB12UKGg5KYGUfZQoaAWMDGdlbmVy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bWVtb3J5X2lucHV0X3NpemU6IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uOiBVMjU2LAogICAgbWVtb3J5X291dHB1dF9zaXplOiBVMjU2LAopIC0+IE5vbmU6CiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19tZXNzYWdlCgogICAgZXZtLnJldHVybl9kYXRhID0gYiIiCgogICAgaWYgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQ6CiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGdhcwogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUKICAgICkKICAgIGNvZGUgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBjb2RlX2FkZHJlc3MpLmNvZGUKICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgIGNhbGxlcj1jYWxsZXIsCiAgICAgICAgdGFyZ2V0PXRvLAogICAgICAgIGdhcz1VMjU2KGdhcyksCiAgICAgICAgdmFsdWU9dmFsdWUsCiAgICAgICAgZGF0YT1jYWxsX2RhdGEsCiAgICAgICAgY29kZT1jb2RlLAogICAgICAgIGN1cnJlbnRfdGFyZ2V0PXRvLAogICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICBjb2RlX2FkZHJlc3M9Y29kZV9hZGRyZXNzLAogICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1zaG91bGRfdHJhbnNmZXJfdmFsdWUsCiAgICAgICAgaXNfc3RhdGljPVRydWUgaWYgaXNfc3RhdGljY2FsbCBlbHNlIGV2bS5tZXNzYWdlLmlzX3N0YXRpYywKICAgICAgICBhY2Nlc3NlZF9hZGRyZXNzZXM9ZXZtLmFjY2Vzc2VkX2FkZHJlc3Nlcy5jb3B5KCksCiAgICAgICAgYWNjZXNzZWRfc3RvcmFnZV9rZXlzPWV2bS5hY2Nlc3NlZF9zdG9yYWdlX2tleXMuY29weSgpLAogICAgKQogICAgY2hpbGRfZXZtID0gcHJvY2Vzc19tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCgogICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gY2hpbGRfZXZtLm91dHB1dAogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDEpKQoKICAgIGFjdHVhbF9vdXRwdXRfc2l6ZSA9IG1pbihtZW1vcnlfb3V0cHV0X3NpemUsIFUyNTYobGVuKGNoaWxkX2V2bS5vdXRwdXQpKSkKICAgIG1lbW9yeV93cml0ZSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgY2hpbGRfZXZtLm91dHB1dFs6YWN0dWFsX291dHB1dF9zaXplXSwKICAgICkKlGgHXZRoP1j+BgAAZGVmIGdlbmVyaWNfY2FsbCgKICAgIGV2bTogRXZtLAogICAgZ2FzOiBVaW50LAogICAgdmFsdWU6IFUyNTYsCiAgICBjYWxsZXI6IEFkZHJlc3MsCiAgICB0bzogQWRkcmVzcywKICAgIGNvZGVfYWRkcmVzczogQWRkcmVzcywKICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZTogYm9vbCwKICAgIGlzX3N0YXRpY2NhbGw6IGJvb2wsCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfaW5wdXRfc2l6ZTogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZQogICAgKQogICAgY29kZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGNvZGVfYWRkcmVzcykuY29kZQogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWNhbGxlciwKICAgICAgICB0YXJnZXQ9dG8sCiAgICAgICAgZ2FzPVUyNTYoZ2FzKSwKICAgICAgICB2YWx1ZT12YWx1ZSwKICAgICAgICBkYXRhPWNhbGxfZGF0YSwKICAgICAgICBjb2RlPWNvZGUsCiAgICAgICAgY3VycmVudF90YXJnZXQ9dG8sCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1jb2RlX2FkZHJlc3MsCiAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPXNob3VsZF90cmFuc2Zlcl92YWx1ZSwKICAgICAgICBpc19zdGF0aWM9VHJ1ZSBpZiBpc19zdGF0aWNjYWxsIGVsc2UgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLAogICAgICAgIGFjY2Vzc2VkX2FkZHJlc3Nlcz1ldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmNvcHkoKSwKICAgICAgICBhY2Nlc3NlZF9zdG9yYWdlX2tleXM9ZXZtLmFjY2Vzc2VkX3N0b3JhZ2Vfa2V5cy5jb3B5KCksCiAgICApCiAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGNoaWxkX2V2bS5vdXRwdXQKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMSkpCgogICAgYWN0dWFsX291dHB1dF9zaXplID0gbWluKG1lbW9yeV9vdXRwdXRfc2l6ZSwgVTI1NihsZW4oY2hpbGRfZXZtLm91dHB1dCkpKQogICAgbWVtb3J5X3dyaXRlKAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBjaGlsZF9ldm0ub3V0cHV0WzphY3R1YWxfb3V0cHV0X3NpemVdLAogICAgKQqUhZSBlH2UKGgFaAZoIGq9DQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllIxeL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vcGFyaXMvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS5weZSMCXhtbDpzcGFjZZRqtAIAAIwFZm9yY2WUiYwIbGFuZ3VhZ2WUjAZweXRob26UjA5oaWdobGlnaHRfYXJnc5R9lGqXCAAASwFz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fZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxq8wcAAGgdaB5oH05oIGr3DQAAdWJlaA59lChoEF2UaBNdlChqNA4AAIwIZnVuY3Rpb26UZWgVXZRoF12UaBldlIwGZG9tYWlulGo0DgAAjAdvYmp0eXBllGqdDgAAjAhkZXNjdHlwZZRqnQ4AAIwHbm9pbmRleJSJdWgcaiAHAABoHU5oH05oIGrbDQAAdWJqKggAACmBlH2UKGgFWMsHAABkZWYgY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICB0byA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCgogICAgaWYgdG8gaW4gZXZtLmFjY2Vzc2VkX2FkZHJlc3NlczoKICAgICAgICBhY2Nlc3NfZ2FzX2Nvc3QgPSBHQVNfV0FSTV9BQ0NFU1MKICAgIGVsc2U6CiAgICAgICAgZXZtLmFjY2Vzc2VkX2FkZHJlc3Nlcy5hZGQodG8pCiAgICAgICAgYWNjZXNzX2dhc19jb3N0ID0gR0FTX0NPTERfQUNDT1VOVF9BQ0NFU1MKCiAgICBjcmVhdGVfZ2FzX2Nvc3QgPSAoCiAgICAgICAgVWludCgwKQogICAgICAgIGlmIGlzX2FjY291bnRfYWxpdmUoZXZtLmVudi5zdGF0ZSwgdG8pIG9yIHZhbHVlID09IDAKICAgICAgICBlbHNlIEdBU19ORVdfQUNDT1VOVAogICAgKQogICAgdHJhbnNmZXJfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIHZhbHVlID09IDAgZWxzZSBHQVNfQ0FMTF9WQUxVRQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIHZhbHVlLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIGFjY2Vzc19nYXNfY29zdCArIGNyZWF0ZV9nYXNfY29zdCArIHRyYW5zZmVyX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMgb3IgdmFsdWUgPT0gVTI1NigwKSwgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlGg/WMsHAABkZWYgY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICB0byA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCgogICAgaWYgdG8gaW4gZXZtLmFjY2Vzc2VkX2FkZHJlc3NlczoKICAgICAgICBhY2Nlc3NfZ2FzX2Nvc3QgPSBHQVNfV0FSTV9BQ0NFU1MKICAgIGVsc2U6CiAgICAgICAgZXZtLmFjY2Vzc2VkX2FkZHJlc3Nlcy5hZGQodG8pCiAgICAgICAgYWNjZXNzX2dhc19jb3N0ID0gR0FTX0NPTERfQUNDT1VOVF9BQ0NFU1MKCiAgICBjcmVhdGVfZ2FzX2Nvc3QgPSAoCiAgICAgICAgVWludCgwKQogICAgICAgIGlmIGlzX2FjY291bnRfYWxpdmUoZXZtLmVudi5zdGF0ZSwgdG8pIG9yIHZhbHVlID09IDAKICAgICAgICBlbHNlIEdBU19ORVdfQUNDT1VOVAogICAgKQogICAgdHJhbnNmZXJfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIHZhbHVlID09IDAgZWxzZSBHQVNfQ0FMTF9WQUxVRQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIHZhbHVlLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIGFjY2Vzc19nYXNfY29zdCArIGNyZWF0ZV9nYXNfY29zdCArIHRyYW5zZmVyX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMgb3IgdmFsdWUgPT0gVTI1NigwKSwgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUhZSBlH2UKGgFaAZoIGqlDgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllIxeL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vcGFyaXMvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS5weZSMCXhtbDpzcGFjZZRqtAIAAIwFZm9yY2WUiYwIbGFuZ3VhZ2WUjAZweXRob26UjA5oaWdobGlnaHRfYXJnc5R9lGqXCAAASwFzjAdsaW5lbm9zlIl1aBxqKQgAAGgdaB5oH0uUaCBq2w0AAHViZWgOfZQoaBBdlGq2AQAAYWgTXZRoFV2UjARjYWxslGFoF12UaBldlHVoHGgzaB1oHmgfS4doIGrzBgAAaCFoA3ViaDQpgZR9lChoBWgGaAddlChoOSmBlH2UKGgFjAhjYWxsY29kZZRoB12UaD+MCGNhbGxjb2RllIWUgZR9lChoBWgGaCBqxg4AAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoOGgdaB5oH0uZaCBqww4AAHViaCQpgZR9lChoBWgGaAddlGgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMB2VudHJpZXOUXZR1aBxoI2gdTmgfTmggasMOAAB1YmohBwAAKYGUfZQoaAVoBmgHXZQoaiYHAAApgZR9lChoBYwNY2FsbGNvZGUoZXZtKZRoB12UKGosBwAAKYGUfZQoaAWMCGNhbGxjb2RllGgHXZRoP4wIY2FsbGNvZGWUhZSBlH2UKGgFaAZoIGrmDgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqOAcAAGo5BwAAajoHAABqOwcAAGVoFV2UaBddlGgZXZSMCXhtbDpzcGFjZZRqtAIAAHVoHGorBwAAaB1oHmgfTmggauIOAAB1YmpBBwAAKYGUfZQoaAWMA2V2bZRoB12UakcHAAApgZR9lChoBYwDZXZtlGgHXZRqTQcAACmBlH2UKGgFaAZoB12UaD+MA2V2bZSFlIGUfZQoaAVoBmggav0OAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UalgHAABhaBVdlGgXXZRoGV2UdWgcakwHAABoHU5oH05oIGr5DgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwJeG1sOnNwYWNllGq0AgAAdWgcakYHAABoHU5oH05oIGr1DgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwJeG1sOnNwYWNllGq0AgAAdWgcakAHAABoHWgeaB9OaCBq4g4AAHViZWgOfZQoaBBdlIwuZXRoZXJldW0ucGFyaXMudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jYWxsY29kZZRhaBNdlChq5wcAAGroBwAAjAJweZRq6gcAAGrrBwAAZWgVXZRoF12UaBldlIwGbW9kdWxllGrwBwAAjAVjbGFzc5RoBowIZnVsbG5hbWWUaugOAAB1aBxqJQcAAGgdaB5oH0ucaCBq3w4AAHViavQHAAApgZR9lChoBWgGaAddlChoaSmBlH2UKGgFjEFNZXNzYWdlLWNhbGwgaW50byB0aGlzIGFjY291bnQgd2l0aCBhbHRlcm5hdGl2ZSBhY2NvdW504oCZcyBjb2RlLpRoB12UaD+MQU1lc3NhZ2UtY2FsbCBpbnRvIHRoaXMgYWNjb3VudCB3aXRoIGFsdGVybmF0aXZlIGFjY291bnTigJlzIGNvZGUulIWUgZR9lChoBWgGaCBqJg8AAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdaB5oH0ufaCBqIw8AAHViahIJAAApgZR9lChoBWgGaAddlGoXCQAAKYGUfZQoaAVoBmgHXZQoahwJAAApgZR9lChoBYwKUGFyYW1ldGVyc5RoB12UaD+MClBhcmFtZXRlcnOUhZSBlH2UKGgFaAZoIGo6DwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGobCQAAaB1oHmgfSwBoIGo3DwAAdWJqLAkAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYwdZXZtIC0tIFRoZSBjdXJyZW50IEVWTSBmcmFtZS6UaAddlChqNQkAACmBlH2UKGgFjANldm2UaAddlGg/jANldm2UhZSBlH2UKGgFaAZoIGpPDwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwLcmVmc3BlY2lmaWOUiIwJcHk6bW9kdWxllGrwBwAAjAhweTpjbGFzc5ROdWgcajQJAABoHU5oH05oIGpLDwAAdWJoP4wbIOKAkyBUaGUgY3VycmVudCBFVk0gZnJhbWUulIWUgZR9lChoBWgGaCBqSw8AAGghaANoHWhEaB9LAHViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggakgPAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaisJAABoHU5oH05oIGo3DwAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGoWCQAAaB1OaB9OaCBqNA8AAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqEQkAAGgdTmgfTmggaiMPAAB1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcavMHAABoHWgeaB9OaCBq3w4AAHViZWgOfZQoaBBdlGgTXZQoahwPAACMCGZ1bmN0aW9ulGVoFV2UaBddlGgZXZSMBmRvbWFpbpRqHA8AAIwHb2JqdHlwZZRqhQ8AAIwIZGVzY3R5cGWUaoUPAACMB25vaW5kZXiUiXVoHGogBwAAaB1OaB9OaCBqww4AAHViaioIAAApgZR9lChoBVgyBwAAZGVmIGNhbGxjb2RlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQoKICAgIGlmIGNvZGVfYWRkcmVzcyBpbiBldm0uYWNjZXNzZWRfYWRkcmVzc2VzOgogICAgICAgIGFjY2Vzc19nYXNfY29zdCA9IEdBU19XQVJNX0FDQ0VTUwogICAgZWxzZToKICAgICAgICBldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmFkZChjb2RlX2FkZHJlc3MpCiAgICAgICAgYWNjZXNzX2dhc19jb3N0ID0gR0FTX0NPTERfQUNDT1VOVF9BQ0NFU1MKCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgYWNjZXNzX2dhc19jb3N0ICsgdHJhbnNmZXJfZ2FzX2Nvc3QsCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZRoP1gyBwAAZGVmIGNhbGxjb2RlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQoKICAgIGlmIGNvZGVfYWRkcmVzcyBpbiBldm0uYWNjZXNzZWRfYWRkcmVzc2VzOgogICAgICAgIGFjY2Vzc19nYXNfY29zdCA9IEdBU19XQVJNX0FDQ0VTUwogICAgZWxzZToKICAgICAgICBldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmFkZChjb2RlX2FkZHJlc3MpCiAgICAgICAgYWNjZXNzX2dhc19jb3N0ID0gR0FTX0NPTERfQUNDT1VOVF9BQ0NFU1MKCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgYWNjZXNzX2dhc19jb3N0ICsgdHJhbnNmZXJfZ2FzX2Nvc3QsCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2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b3AoZXZtLnN0YWNrKSkKCiAgICAjIEdBUwogICAgaWYgYmVuZWZpY2lhcnkgbm90IGluIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXM6CiAgICAgICAgZXZtLmFjY2Vzc2VkX2FkZHJlc3Nlcy5hZGQoYmVuZWZpY2lhcnkpCiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19DT0xEX0FDQ09VTlRfQUNDRVNTKQoKICAgIGlmICgKICAgICAgICBub3QgaXNfYWNjb3VudF9hbGl2ZShldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkKICAgICAgICBhbmQgZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpLmJhbGFuY2UgIT0gMAogICAgKToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QgKyBHQVNfU0VMRl9ERVNUUlVDVF9ORVdfQUNDT1VOVCkKICAgIGVsc2U6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUKQoKICAgICMgT1BFUkFUSU9OCiAgICBlbnN1cmUobm90IGV2bS5tZXNzYWdlLmlzX3N0YXRpYywgV3JpdGVJblN0YXRpY0NvbnRleHQpCgogICAgb3JpZ2luYXRvciA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBiZW5lZmljaWFyeV9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpLmJhbGFuY2UKICAgIG9yaWdpbmF0b3JfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIG9yaWdpbmF0b3IpLmJhbGFuY2UKCiAgICAjIEZpcnN0IFRyYW5zZmVyIHRvIGJlbmVmaWNpYXJ5CiAgICBzZXRfYWNjb3VudF9iYWxhbmNlKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5LCBiZW5lZmljaWFyeV9iYWxhbmNlICsgb3JpZ2luYXRvcl9iYWxhbmNlCiAgICApCiAgICAjIE5leHQsIFplcm8gdGhlIGJhbGFuY2Ugb2YgdGhlIGFkZHJlc3MgYmVpbmcgZGVsZXRlZCAobXVzdCBjb21lIGFmdGVyCiAgICAjIHNlbmRpbmcgdG8gYmVuZWZpY2lhcnkgaW4gY2FzZSB0aGUgY29udHJhY3QgbmFtZWQgaXRzZWxmIGFzIHRoZQogICAgIyBiZW5lZmljaWFyeSkuCiAgICBzZXRfYWNjb3VudF9iYWxhbmNlKGV2bS5lbnYuc3RhdGUsIG9yaWdpbmF0b3IsIFUyNTYoMCkpCgogICAgIyByZWdpc3RlciBhY2NvdW50IGZvciBkZWxldGlvbgogICAgZXZtLmFjY291bnRzX3RvX2RlbGV0ZS5hZGQob3JpZ2luYXRvcikKCiAgICAjIG1hcmsgYmVuZWZpY2lhcnkgYXMgdG91Y2hlZAogICAgaWYgYWNjb3VudF9leGlzdHNfYW5kX2lzX2VtcHR5KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KToKICAgICAgICBldm0udG91Y2hlZF9hY2NvdW50cy5hZGQoYmVuZWZpY2lhcnkpCgogICAgIyBIQUxUIHRoZSBleGVjdXRpb24KICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUldBCAAAAAAAAaAddlGg/WMYFAABkZWYgc2VsZmRlc3RydWN0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBpZiBiZW5lZmljaWFyeSBub3QgaW4gZXZtLmFjY2Vzc2VkX2FkZHJlc3NlczoKICAgICAgICBldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmFkZChiZW5lZmljaWFyeSkKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX0NPTERfQUNDT1VOVF9BQ0NFU1MpCgogICAgaWYgKAogICAgICAgIG5vdCBpc19hY2NvdW50X2FsaXZlKGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KQogICAgICAgIGFuZCBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkuYmFsYW5jZSAhPSAwCiAgICApOgogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfU0VMRl9ERVNUUlVDVCArIEdBU19TRUxGX0RFU1RSVUNUX05FV19BQ0NPVU5UKQogICAgZWxzZToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QpCgogICAgIyBPUEVSQVRJT04KICAgIGVuc3VyZShub3QgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLCBXcml0ZUluU3RhdGljQ29udGV4dCkKCiAgICBvcmlnaW5hdG9yID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIGJlbmVmaWNpYXJ5X2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkuYmFsYW5jZQogICAgb3JpZ2luYXRvcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvcikuYmFsYW5jZQoKICAgICMgRmlyc3QgVHJhbnNmZXIgdG8gYmVuZWZpY2lhcnkKICAgIHNldF9hY2NvdW50X2JhbGFuY2UoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnksIGJlbmVmaWNpYXJ5X2JhbGFuY2UgKyBvcmlnaW5hdG9yX2JhbGFuY2UKICAgICkKICAgICMgTmV4dCwgWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgYWRkcmVzcyBiZWluZyBkZWxldGVkIChtdXN0IGNvbWUgYWZ0ZXIKICAgICMgc2VuZGluZyB0byBiZW5lZmljaWFyeSBpbiBjYXNlIHRoZSBjb250cmFjdCBuYW1lZCBpdHNlbGYgYXMgdGhlCiAgICAjIGJlbmVmaWNpYXJ5KS4KICAgIHNldF9hY2NvdW50X2JhbGFuY2UoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvciwgVTI1NigwKSkKCiAgICAjIHJlZ2lzdGVyIGFjY291bnQgZm9yIGRlbGV0aW9uCiAgICBldm0uYWNjb3VudHNfdG9fZGVsZXRlLmFkZChvcmlnaW5hdG9yKQoKICAgICMgbWFyayBiZW5lZmljaWFyeSBhcyB0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cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKCiAgICBpZiBjb2RlX2FkZHJlc3MgaW4gZXZtLmFjY2Vzc2VkX2FkZHJlc3NlczoKICAgICAgICBhY2Nlc3NfZ2FzX2Nvc3QgPSBHQVNfV0FSTV9BQ0NFU1MKICAgIGVsc2U6CiAgICAgICAgZXZtLmFjY2Vzc2VkX2FkZHJlc3Nlcy5hZGQoY29kZV9hZGRyZXNzKQogICAgICAgIGFjY2Vzc19nYXNfY29zdCA9IEdBU19DT0xEX0FDQ09VTlRfQUNDRVNTCgogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIFUyNTYoMCksIGdhcywgVWludChldm0uZ2FzX2xlZnQpLCBleHRlbmRfbWVtb3J5LmNvc3QsIGFjY2Vzc19nYXNfY29zdAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgIGV2bS5tZXNzYWdlLnZhbHVlLAogICAgICAgIGV2bS5tZXNzYWdlLmNhbGxlciwKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBjb2RlX2FkZHJlc3MsCiAgICAgICAgRmFsc2UsCiAgICAgICAgRmFsc2UsCiAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlGg/WGsFAABkZWYgZGVsZWdhdGVjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCgogICAgaWYgY29kZV9hZGRyZXNzIGluIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXM6CiAgICAgICAgYWNjZXNzX2dhc19jb3N0ID0gR0FTX1dBUk1fQUNDRVNTCiAgICBlbHNlOgogICAgICAgIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXMuYWRkKGNvZGVfYWRkcmVzcykKICAgICAgICBhY2Nlc3NfZ2FzX2Nvc3QgPSBHQVNfQ09MRF9BQ0NPVU5UX0FDQ0VTUwoKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBVMjU2KDApLCBnYXMsIFVpbnQoZXZtLmdhc19sZWZ0KSwgZXh0ZW5kX21lbW9yeS5jb3N0LCBhY2Nlc3NfZ2FzX2Nvc3QKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgZXZtLAogICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICBldm0ubWVzc2FnZS52YWx1ZSwKICAgICAgICBldm0ubWVzc2FnZS5jYWxsZXIsCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgIEZhbHNlLAogICAgICAgIEZhbHNlLAogICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlIWUgZR9lChoBWgGaCBqXREAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMXi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL3BhcmlzL3Zt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c19jb3N0ID0gR0FTX1dBUk1fQUNDRVNTCiAgICBlbHNlOgogICAgICAgIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXMuYWRkKHRvKQogICAgICAgIGFjY2Vzc19nYXNfY29zdCA9IEdBU19DT0xEX0FDQ09VTlRfQUNDRVNTCgogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIFUyNTYoMCksCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgYWNjZXNzX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgIFUyNTYoMCksCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgdG8sCiAgICAgICAgdG8sCiAgICAgICAgVHJ1ZSwKICAgICAgICBUcnVlLAogICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZRoP1hGBQAAZGVmIHN0YXRpY2NhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgdG8gPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQoKICAgIGlmIHRvIGluIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXM6CiAgICAgICAgYWNjZXNzX2dhc19jb3N0ID0gR0FTX1dBUk1fQUNDRVNTCiAgICBlbHNlOgogICAgICAgIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXMuYWRkKHRvKQogICAgICAgIGFjY2Vzc19nYXNfY29zdCA9IEdBU19DT0xEX0FDQ09VTlRfQUNDRVNTCgogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIFUyNTYoMCksCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgYWNjZXNzX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNf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ICAjIFNUQUNLCiAgICBtZW1vcnlfc3RhcnRfaW5kZXggPSBwb3AoZXZtLnN0YWNrKQogICAgc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfaW5kZXgsIHNpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBvdXRwdXQgPSBtZW1vcnlfcmVhZF9ieXRlcyhldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfaW5kZXgsIHNpemUpCiAgICBldm0ub3V0cHV0ID0gYnl0ZXMob3V0cHV0KQogICAgcmFpc2UgUmV2ZXJ0CgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBq5RIAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMXi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL3BhcmlzL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0ucHmUjAl4bWw6c3BhY2WUarQCAACMBWZvcmNllImMCGxhbmd1YWdllIwGcHl0aG9ulIwOaGlnaGxpZ2h0X2FyZ3OUfZRqlwgAAEsBc4wHbGluZW5vc5SJdWgcaikIAABoHWgeaB9L7mggamMSAAB1YmVoDn2UKGgQXZRqYAIAAGFoE12UaBVdlIwGcmV2ZXJ0lGFoF12UaBldlHVoHGgzaB1oHmgfS+FoIGrzBgAAaCFoA3ViZWgOfZQoaBBdlGjtYWgTXZRoFV2UjA5tb2R1bGUgZGV0YWlsc5RhaBddlGgZXZR1aBxoM2gdaB5oH0sraCBoNWghaAN1YmVoDn2UKGgQXZSMMGV0aGVyZXVtLXZpcnR1YWwtbWFjaGluZS1ldm0tc3lzdGVtLWluc3RydWN0aW9uc5RhaBNdlGgVXZSMMmV0aGVyZXVtIHZpcnR1YWwgbWFjaGluZSAoZXZtKSBzeXN0ZW0gaW5zdHJ1Y3Rpb25zlGFoF12UaBldlHVoHGgzaB1oHmgfSwRoIGgDaCFoA3ViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZRoRHVoHGgBjA5jdXJyZW50X3NvdXJjZZRoRIwMY3VycmVudF9saW5llEsAjAhzZXR0aW5nc5SMEWRvY3V0aWxzLmZyb250ZW5klIwGVmFsdWVzlJOUKYGUfZQojAxyZXBvcnRfbGV2ZWyUSwKMCmhhbHRfbGV2ZWyUSwSMEWV4aXRfc3RhdHVzX2xldmVslEsFjAVkZWJ1Z5ROjA53YXJuaW5nX3N0cmVhbZROjAl0cmFjZWJhY2uUTowPb3V0cHV0X2VuY29kaW5nlIwFdXRmLTiUjB1vdXRwdXRfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcpSMEXhtbGNoYXJyZWZyZXBsYWNllIwOZXJyb3JfZW5jb2RpbmeUjAV1dGYtOJSMHGVycm9yX2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjBBiYWNrc2xhc2hyZXBsYWNllIwTcmVjb3JkX2RlcGVuZGVuY2llc5SMDmRvY3V0aWxzLnV0aWxzlIwORGVwZW5kZW5jeUxpc3SUk5QpgZR9lCiMBGxpc3SUXZSMBGZpbGWUTnVijAZjb25maWeUTowNZHVtcF9zZXR0aW5nc5ROjA5kdW1wX2ludGVybmFsc5ROjA9kdW1wX3RyYW5zZm9ybXOUTowPZHVtcF9wc2V1ZG9feG1slE6MEGV4cG9zZV9pbnRlcm5hbHOUTowOc3RyaWN0X3Zpc2l0b3KUTowPX2Rpc2FibGVfY29uZmlnlE6MB19zb3VyY2WUTowMX2Rlc3RpbmF0aW9ulIw+ZG9jL2RpZmZzL3BhcmlzX3NoYW5naGFpL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucGlja2xlNjSUjA1fY29uZmlnX2ZpbGVzlF2UjBFsaW5lX2xlbmd0aF9saW1pdJRNECeMCXRhYl93aWR0aJRLCIwQc3ludGF4X2hpZ2hsaWdodJSMBGxvbmeUjAxzbWFydF9xdW90ZXOUiYwTc21hcnRxdW90ZXNfbG9jYWxlc5ROjB1jaGFyYWN0ZXJfbGV2ZWxfaW5saW5lX21hcmt1cJSJjAZ3cml0ZXKUjAN4bWyUjBljb21wYXJlX3NlY3Rpb25zX2J5X25hbWVzlEsBjAxkdW1wX3JzdGRpZmaUTowFX2JvdGiUfZQoaDhOjAlnZW5lcmF0b3KUTowJZGF0ZXN0YW1wlE6MC3NvdXJjZV9saW5rlE6MCnNvdXJjZV91cmyUTowNdG9jX2JhY2tsaW5rc5RqHQMAAIwSZm9vdG5vdGVfYmFja2xpbmtzlEsBjA1zZWN0bnVtX3hmb3JtlEsBjA5kb2N0aXRsZV94Zm9ybZRLAYwNZG9jaW5mb194Zm9ybZRLAYwSc2VjdHN1YnRpdGxlX3hmb3JtlEsAjA5zdHJpcF9jb21tZW50c5ROjA5pbnB1dF9lbmNvZGluZ5ROjBxpbnB1dF9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwGc3RyaWN0lIwNbGFuZ3VhZ2VfY29kZZSMAmVulIwOcGVwX3JlZmVyZW5jZXOUTowMcGVwX2Jhc2VfdXJslIwfaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL5SMFXBlcF9maWxlX3VybF90ZW1wbGF0ZZSMCHBlcC0lMDRklIwOcmZjX3JlZmVyZW5jZXOUTowMcmZjX2Jhc2VfdXJslIwbaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvlIwddHJpbV9mb290bm90ZV9yZWZlcmVuY2Vfc3BhY2WUTowWZmlsZV9pbnNlcnRpb25fZW5hYmxlZJRLAYwLcmF3X2VuYWJsZWSUSwGMDmF1dG9faWRfcHJlZml4lIwCaWSUjAlpZF9wcmVmaXiUaAaMG3N0cmlwX2VsZW1lbnRzX3dpdGhfY2xhc3Nlc5ROjA1zdHJpcF9jbGFzc2VzlE51jARib3RolH2UjApfb3B0aW9uc1RvlIwFX2JvdGiUjAtfb2xkX3NvdXJjZZSMTy9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvLnRveC9kb2NzL3N0YWdlMF9vdXQvYXV0b2FwaS+UjAtfbmV3X3NvdXJjZZSMCWRvYy9kaWZmc5RqYBMAAGphEwAAjBZpZ25vcmVfaW5fc2VjdGlvbl9uYW1llF2UKIwFcGFyaXOUjAhzaGFuZ2hhaZRldWKMCHJlcG9ydGVylE6MEGluZGlyZWN0X3RhcmdldHOUXZSMEXN1YnN0aXR1dGlvbl9kZWZzlH2UjBJzdWJzdGl0dXRpb25fbmFtZXOUfZSMCHJlZm5hbWVzlH2UjAZyZWZpZHOUfZSMB25hbWVpZHOUfZSMCW5hbWV0eXBlc5R9lGgQfZSMDWZvb3Rub3RlX3JlZnOUfZSMDWNpdGF0aW9uX3JlZnOUfZSMDWF1dG9mb290bm90ZXOUXZSMEWF1dG9mb290bm90ZV9yZWZzlF2UjBBzeW1ib2xfZm9vdG5vdGVzlF2UjBRzeW1ib2xfZm9vdG5vdGVfcmVmc5RdlIwJZm9vdG5vdGVzlF2UjAljaXRhdGlvbnOUXZSMEmF1dG9mb290bm90ZV9zdGFydJRLAYwVc3ltYm9sX2Zvb3Rub3RlX3N0YXJ0lEsAjAppZF9jb3VudGVylIwLY29sbGVjdGlvbnOUjAdDb3VudGVylJOUfZSFlFKUjA5wYXJzZV9tZXNzYWdlc5RdlIwSdHJhbnNmb3JtX21lc3NhZ2VzlF2UjAt0cmFuc2Zvcm1lcpROjAtpbmNsdWRlX2xvZ5RdlIwKZGVjb3JhdGlvbpROaCFoA3ViLg==