gASVyNcAAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIwwbW9kdWxlLWV0aGVyZXVtLmhvbWVzdGVhZC52bS5pbnN0cnVjdGlvbnMuc3lzdGVtlGGMB2NsYXNzZXOUXZSMBW5hbWVzlF2UjAhkdXBuYW1lc5RdlIwIYmFja3JlZnOUXZSMBWlzbW9klIh1jAd0YWduYW1llGgJjAZzb3VyY2WUjHEvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2hvbWVzdGVhZC92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdJSMBGxpbmWUSwGMBnBhcmVudJRoA4wJX2RvY3VtZW50lGgDdWKMD3NwaGlueC5hZGRub2Rlc5SMBWluZGV4lJOUKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAdlbnRyaWVzlF2UKIwEcGFpcpSMMW1vZHVsZTsgZXRoZXJldW0uaG9tZXN0ZWFkLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVo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XZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIwwZXRoZXJldW0uaG9tZXN0ZWFkLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY3JlYXRllIwIcmVmdGl0bGWUjDBldGhlcmV1bS5ob21lc3RlYWQudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jcmVhdGWUdWgcaG1oHU5oH05oIGqaAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mgi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vaG9tZXN0ZWFkL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggapcCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGqSAgAAdWJqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYwrQ3JlYXRlcyBhIG5ldyBhY2NvdW50IHdpdGggYXNzb2NpYXRlZCBjb2RlLpRoB12UaD+MK0NyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS6UhZSBlH2UKGgFaAZoIGrOAgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mgi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vaG9tZXN0ZWFkL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggassCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGqSAgAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqQAgAAaB1OaB9OaCBqjQIAAHViapECAAApgZR9lChoBWgGaAddlChqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxCOm9iajpgcmV0dXJuXyA8ZXRoZXJldW0uaG9tZXN0ZWFkLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0ucmV0dXJuXz5glGgHXZRobimBlH2UKGgFaAZoB12UaqICAAApgZR9lChoBWrxAgAAaAddlGg/jAdyZXR1cm5flIWUgZR9lChoBWgGaCBq9gIAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZQoaq0CAACMAnB5lIwGcHktb2JqlGVoFV2UaBddlGgZXZR1aBxqoQIAAGgdTmgfTmggavMCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSMMWV0aGVyZXVtLmhvbWVzdGVhZC52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLnJldHVybl+UjAhyZWZ0aXRsZZSMMWV0aGVyZXVtLmhvbWVzdGVhZC52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLnJldHVybl+UdWgcaG1oHU5oH05oIGrvAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mgi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vaG9tZXN0ZWFkL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggauwCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGrpAgAAdWJqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYwmSGFsdHMgZXhlY3V0aW9uIHJldHVybmluZyBvdXRwdXQgZGF0YS6UaAddlGg/jCZIYWx0cyBleGVjdXRpb24gcmV0dXJuaW5nIG91dHB1dCBkYXRhLpSFlIGUfZQoaAVoBmggaiADAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyCL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9ob21lc3RlYWQvdm0vaW5zdHJ1Y3Rpb25zL3N5c3Rl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bWVzdGVhZC52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGyUjAhyZWZ0aXRsZZSMLmV0aGVyZXVtLmhvbWVzdGVhZC52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGyUdWgcaG1oHU5oH05oIGqnAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mgi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vaG9tZXN0ZWFkL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggaqQDAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGqhAwAAdWJqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYwdTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC6UaAddlGg/jB1NZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LpSFlIGUfZQoaAVoBmggatgDAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyCL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9ob21lc3RlYWQvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzc6PGF1dG9zdW1tYXJ5PpRoH0sBaCBq1QMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqlQIAAGgdTmgfTmggaqEDAAB1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapACAABoHU5oH05oIGqNAgAAdWJqkQIAACmBlH2UKGgFaAZoB12UKGqWAgAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjEQ6b2JqOmBjYWxsY29kZSA8ZXRoZXJldW0uaG9tZXN0ZWFkLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY2FsbGNvZGU+YJRoB12UaG4pgZR9lChoBWgGaAddlGqiAgAAKYGUfZQoaAVq+wMAAGgHXZRoP4wIY2FsbGNvZGWUhZSBlH2UKGgFaAZoIGoABAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqrQIAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGqhAgAAaB1OaB9OaCBq/QMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIwyZXRoZXJldW0uaG9tZXN0ZWFkLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY2FsbGNvZGWUjAhyZWZ0aXRsZZSMMmV0aGVyZXVtLmhvbWVzdGVhZC52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGxjb2RllHVoHGhtaB1OaB9OaCBq+QMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIIvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2hvbWVzdGVhZC92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNzo8YXV0b3N1bW1hcnk+lGgfSwFoIGr2AwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqVAgAAaB1OaB9OaCBq8wMAAHViapYCAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMQU1lc3NhZ2UtY2FsbCBpbnRvIHRoaXMgYWNjb3VudCB3aXRoIGFsdGVybmF0aXZlIGFjY291bnTigJlzIGNvZGUulGgHXZRoP4xBTWVzc2FnZS1jYWxsIGludG8gdGhpcyBhY2NvdW50IHdpdGggYWx0ZXJuYXRpdmUgYWNjb3VudOKAmXMgY29kZS6UhZSBlH2UKGgFaAZoIGoqBAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mgi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vaG9tZXN0ZWFkL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRv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aXRpb24sIG1lbW9yeV9zaXplKV0KICAgICkKCiAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX0NSRUFURSArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICBjcmVhdGVfbWVzc2FnZV9nYXMgPSBldm0uZ2FzX2xlZnQKICAgIGV2bS5nYXNfbGVmdCA9IFUyNTYoMCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9hZGRyZXNzID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIHNlbmRlciA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIHNlbmRlcl9hZGRyZXNzKQoKICAgIGNvbnRyYWN0X2FkZHJlc3MgPSBjb21wdXRlX2NvbnRyYWN0X2FkZHJlc3MoCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpLm5vbmNlLAogICAgKQoKICAgIGlmICgKICAgICAgICBzZW5kZXIuYmFsYW5jZSA8IGVuZG93bWVudAogICAgICAgIG9yIHNlbmRlci5ub25jZSA9PSBVaW50KDIqKjY0IC0gMSkKICAgICAgICBvciBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVAogICAgKToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gY3JlYXRlX21lc3NhZ2VfZ2FzCiAgICBlbGlmIGFjY291bnRfaGFzX2NvZGVfb3Jfbm9uY2UoZXZtLmVudi5zdGF0ZSwgY29udHJhY3RfYWRkcmVzcyk6CiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgICAgICkKCiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQoKICAgICAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICAgICAgY2FsbGVyPWV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0YXJnZXQ9Qnl0ZXMwKCksCiAgICAgICAgICAgIGdhcz1jcmVhdGVfbWVzc2FnZV9nYXMsCiAgICAgICAgICAgIHZhbHVlPWVuZG93bWVudCwKICAgICAgICAgICAgZGF0YT1iIiIsCiAgICAgICAgICAgIGNvZGU9Y2FsbF9kYXRhLAogICAgICAgICAgICBjdXJyZW50X3RhcmdldD1jb250cmFjdF9hZGRyZXNzLAogICAgICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgICAgIGNvZGVfYWRkcmVzcz1Ob25lLAogICAgICAgICAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU9VHJ1ZSwKICAgICAgICApCiAgICAgICAgY2hpbGRfZXZtID0gcHJvY2Vzc19jcmVhdGVfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgICAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UKGg/WJkHAABkZWYgY3JlYXRlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBUaGlzIGltcG9ydCBjYXVzZXMgYSBjaXJjdWxhciBpbXBvcnQgZXJyb3IKICAgICMgaWYgaXQncyBub3QgbW92ZWQgaW5zaWRlIHRoaXMgbWV0aG9kCiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19jcmVhdGVfbWVzc2FnZQoKICAgICMgU1RBQ0sKICAgIGVuZG93bWVudCA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19DUkVBVEUgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgY3JlYXRlX21lc3NhZ2VfZ2FzID0gZXZtLmdhc19sZWZ0CiAgICBldm0uZ2FzX2xlZnQgPSBVMjU2KDApCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYWRkcmVzcyA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBzZW5kZXIgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBzZW5kZXJfYWRkcmVzcykKCiAgICBjb250cmFjdF9hZGRyZXNzID0gY29tcHV0ZV9jb250cmFjdF9hZGRyZXNzKAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5ub25jZSwKICAgICkKCiAgICBpZiAoCiAgICAgICAgc2VuZGVyLmJhbGFuY2UgPCBlbmRvd21lbnQKICAgICAgICBvciBzZW5kZXIubm9uY2UgPT0gVWludCgyKio2NCAtIDEpCiAgICAgICAgb3IgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQKICAgICk6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGNyZWF0ZV9tZXNzYWdlX2dhcwogICAgZWxpZiBhY2NvdW50X2hhc19jb2RlX29yX25vbmNlKGV2bS5lbnYuc3RhdGUsIGNvbnRyYWN0X2FkZHJlc3MpOgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICAgICApCgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKCiAgICAgICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgICAgIGNhbGxlcj1ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdGFyZ2V0PUJ5dGVzMCgpLAogICAgICAgICAgICBnYXM9Y3JlYXRlX21lc3NhZ2VfZ2FzLAogICAgICAgICAgICB2YWx1ZT1lbmRvd21lbnQsCiAgICAgICAgICAgIGRhdGE9YiIiLAogICAgICAgICAgICBjb2RlPWNhbGxfZGF0YSwKICAgICAgICAgICAgY3VycmVu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X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19aRVJPICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLm91dHB1dCA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBqXAcAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMYi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL2hvbWVzdGVhZC92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGosAgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UanwGAABLAXOMB2xpbmVub3OUiXVoHGoOBgAAaB1oHmgfS0loIGqFBgAAdWJlaA59lChoEF2Uai4BAABhaBNdlGgVXZSMBnJldHVybpRhaBddlGgZXZR1aBxoM2gdaB5oH0s8aCBqEQUAAGghaAN1Ymg0KYGUfZQoaAVoBmgHXZQoaDkpgZR9lChoBYwMZ2VuZXJpY19jYWxslGgHXZRoP4wMZ2VuZXJpY19jYWxslIWUgZR9lChoBWgGaCBqfQcAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoOGgdaB5o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IG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUKICAgICkKICAgIGNvZGUgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBjb2RlX2FkZHJlc3MpLmNvZGUKICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgIGNhbGxlcj1jYWxsZXIsCiAgICAgICAgdGFyZ2V0PXRvLAogICAgICAgIGdhcz1VMjU2KGdhcyksCiAgICAgICAgdmFsdWU9dmFsdWUsCiAgICAgICAgZGF0YT1jYWxsX2RhdGEsCiAgICAgICAgY29kZT1jb2RlLAogICAgICAgIGN1cnJlbnRfdGFyZ2V0PXRvLAogICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICBjb2RlX2FkZHJlc3M9Y29kZV9hZGRyZXNzLAogICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1zaG91bGRfdHJhbnNmZXJfdmFsdWUsCiAgICApCiAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9zdWNjZXNzKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDEpKQoKICAgIGFjdHVhbF9vdXRwdXRfc2l6ZSA9IG1pbihtZW1vcnlfb3V0cHV0X3NpemUsIFUyNTYobGVuKGNoaWxkX2V2bS5vdXRwdXQpKSkKICAgIG1lbW9yeV93cml0ZSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgY2hpbGRfZXZtLm91dHB1dFs6YWN0dWFsX291dHB1dF9zaXplXSwKICAgICkKlGgHXZQoaD9YGgQAAGRlZiBnZW5lcmljX2NhbGwoCiAgICBldm06IEV2bSwKICAgIGdhczogVWludCwKICAgIHZhbHVlOiBVMjU2LAogICAgY2FsbGVyOiBBZGRyZXNzLAogICAgdG86IEFkZHJlc3MsCiAgICBjb2RlX2FkZHJlc3M6IEFkZHJlc3MsCiAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU6IGJvb2wsCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfaW5wdXRfc2l6ZTogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZQogICAgKQogICAgY29kZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGNvZGVfYWRkcmVzcykuY29kZQogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWNhbGxlciwKICAgICAgICB0YXJnZXQ9dG8sCiAgICAgICAgZ2FzPVUyNTYoZ2FzKSwKICAgICAgICB2YWx1ZT12YWx1ZSwKICAgICAgICBkYXRhPWNhbGxfZGF0YSwKICAgICAgICBjb2RlPWNvZGUsCiAgICAgICAgY3VycmVudF90YXJnZXQ9dG8sCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVw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ZWgOfZQoaBBdlGgTXZQoassJAACMCGZ1bmN0aW9ulGVoFV2UaBddlGgZXZSMBmRvbWFpbpRqywkAAIwHb2JqdHlwZZRqNAoAAIwIZGVzY3R5cGWUajQKAACMB25vaW5kZXiUiXVoHGo+BQAAaB1OaB9OaCBqcgkAAHViag8GAAApgZR9lChoBVhfBQAAZGVmIGNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgdG8gPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgdmFsdWUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGdhcywgdG8sIHZhbHVlCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9YXwUAAGRlZiBjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIHRvID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIHZhbHVlID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBldm0uZW52LnN0YXRlLCBnYXMsIHRvLCB2YWx1ZQogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgICkuYmFsYW5jZQogICAgaWYgc2VuZGVyX2JhbGFuY2UgPCB2YWx1ZToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kCiAgICBlbHNlOgogICAgICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICAgICAgZXZtLAogICAgICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHRvLAogICAgICAgICAg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dGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIHRvID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZ2FzLCB0bywgdmFsdWUKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYmFsYW5jZSA9IGdldF9hY2NvdW50KAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICApLmJhbGFuY2UKICAgIGlmIHNlbmRlcl9iYWxhbmNlIDwgdmFsdWU6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZAogICAgZWxzZToKICAgICAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgICAgIGV2bSwKICAgICAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICBjb2RlX2FkZHJlc3MsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9YnAUAAGRlZiBjYWxsY29kZShldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICBjb2RlX2FkZHJlc3MgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgdmFsdWUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgdG8gPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAoKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBldm0uZW52LnN0YXRlLCBnYXMsIHRvLCB2YWx1ZQogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgICkuYmFsYW5jZQogICAgaWYgc2VuZGVyX2JhbGFuY2UgPCB2YWx1ZToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kCiAgICBlbHNlOgogICAgICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICAgICAgZXZtLAogICAgICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIGNvZGVfYWRkcmVzcywKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZt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c2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBIQUxUIHRoZSBleGVjdXRpb24KICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUaAddlGg/WFQDAABkZWYgc2VsZmRlc3RydWN0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBwYXNzCgogICAgIyBPUEVSQVRJT04KICAgIG9yaWdpbmF0b3IgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgYmVuZWZpY2lhcnlfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KS5iYWxhbmNlCiAgICBvcmlnaW5hdG9yX2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yKS5iYWxhbmNlCgogICAgIyBGaXJzdCBUcmFuc2ZlciB0byBiZW5lZmljaWFyeQogICAgc2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBIQUxUIHRoZSBleGVjdXRpb24KICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUhZSBlH2UKGgFaAZoIGoMDAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllIxiL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vaG9tZXN0ZWFkL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0ucHmUjAl4bWw6c3BhY2WUaiwCAACMBWZvcmNllImMCGxhbmd1YWdllIwGcHl0aG9ulIwOaGlnaGxpZ2h0X2FyZ3OUfZRqfAYAAEsBc4wHbGluZW5vc5SJdWgcag4GAABoHWgeaB9Lj2ggakILAAB1YmVoDn2UKGgQXZRqtgEAAGFoE12UaBVdlIwMc2VsZmRlc3RydWN0lGFoF12UaBldlHVoHGgzaB1oHmgfS4JoIGoRBQAAaCFoA3ViaDQpgZR9lChoBWgGaAddlChoOSmBlH2UKGgFjAxkZWxlZ2F0ZWNhbGyUaAddlGg/jAxkZWxlZ2F0ZWNhbGyUhZSBlH2UKGgFaAZoIGotDAAAaCFoA2gdaERoH0sA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PgUAAGgdTmgfTmggaioMAAB1YmoPBgAAKYGUfZQoaAVY8QMAAGRlZiBkZWxlZ2F0ZWNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ0FMTCArIGdhcyArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgZ2FzLAogICAgICAgIGV2bS5tZXNzYWdlLnZhbHVlLAogICAgICAgIGV2bS5tZXNzYWdlLmNhbGxlciwKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBjb2RlX2FkZHJlc3MsCiAgICAgICAgRmFsc2UsCiAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlGg/WPEDAABkZWYgZGVsZWdhdGVjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX0NBTEwgKyBnYXMgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgZXZtLAogICAgICAgIGdhcywKICAgICAgICBldm0ubWVzc2FnZS52YWx1ZSwKICAgICAgICBldm0ubWVzc2FnZS5jYWxsZXIsCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgIEZhbHNlLAogICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlIWUgZR9lChoBWgGaCBq9AwAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMYi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL2hvbWVzdGVhZC92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGosAgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UanwGAABLAXOMB2xpbmVub3OUiXVoHGoOBgAAaB1oHmgfS6FoIGoqDAAAdWJlaA59lChoEF2UatgBAABhaBNdlGgVXZSMDGRlbGVnYXRlY2FsbJRhaBddlGgZXZR1aBxoM2gdaB5oH0uUaCBqEQUAAGghaAN1YmVoDn2UKGgQXZRo7WFoE12UaBVdlIwObW9kdWxlIGRldGFpbHOUYWgXXZRoGV2UdWgcaDNoHWgeaB9LJ2ggaDVoIWgDdWJlaA59lChoEF2UjDBldGhlcmV1bS12aXJ0dWFsLW1hY2hpbmUtZXZtLXN5c3RlbS1pbnN0cnVjdGlvbnOUYWgTXZRoFV2UjDJldGhlcmV1bSB2aXJ0dWFsIG1hY2hpbmUgKGV2bSkgc3lzdGVtIGluc3RydWN0aW9uc5RhaBddlGgZXZR1aBxoM2gdaB5oH0sEaCBoA2ghaAN1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUaER1aBxoAYwOY3VycmVudF9zb3VyY2WUaESMDGN1cnJlbnRfbGluZZRLAIwIc2V0dGluZ3OUjBFkb2N1dGlscy5mcm9udGVuZJSMBlZhbHVlc5STlCmBlH2UKIwMcmVwb3J0X2xldmVslEsCjApoYWx0X2xldmVslEsEjBFleGl0X3N0YXR1c19sZXZlbJRLBYwFZGVidWeUTowOd2FybmluZ19zdHJlYW2UTowJdHJhY2ViYWNrlE6MD291dHB1dF9lbmNvZGluZ5SMBXV0Zi04lIwdb3V0cHV0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjBF4bWxjaGFycmVmcmVwbGFjZZSMDmVycm9yX2VuY29kaW5nlIwFdXRmLTiUjBxlcnJvcl9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwQYmFja3NsYXNocmVwbGFjZZSME3JlY29yZF9kZXBlbmRlbmNpZXOUjA5kb2N1dGlscy51dGlsc5SMDkRlcGVuZGVuY3lMaXN0lJOUKYGUfZQojARsaXN0lF2UjARmaWxllE51YowGY29uZmlnlE6MDWR1bXBfc2V0dGluZ3OUTowOZHVtcF9pbnRlcm5hbHOUTowPZHVtcF90cmFuc2Zvcm1zlE6MD2R1bXBfcHNldWRvX3htbJROjBBleHBvc2VfaW50ZXJuYWxzlE6MDnN0cmljdF92aXNpdG9ylE6MD19kaXNhYmxlX2NvbmZpZ5ROjAdfc291cmNllE6MDF9kZXN0aW5hdGlvbpSMQmRvYy9kaWZmcy9ob21lc3RlYWRfZGFvX2Zvcmsvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5waWNrbGU2NJSMDV9jb25maWdfZmlsZXOUXZSMEWxpbmVfbGVuZ3RoX2xpbWl0lE0QJ4wJdGFiX3dpZHRolEsIjBBzeW50YXhfaGlnaGxpZ2h0lIwEbG9uZ5SMDHNtYXJ0X3F1b3Rlc5SJjBNzbWFydHF1b3Rlc19sb2NhbGVzlE6MHWNoYXJhY3Rlcl9sZXZlbF9pbmxpbmVfbWFya3VwlImMBndyaXRlcpSMA3htbJSMGWNvbXBhcmVfc2VjdGlvbnNfYnlfbmFtZXOUSwGMDGR1bXBfcnN0ZGlmZpROjAVfYm90aJR9lChoOE6MCWdlbmVyYXRvcpROjAlkYXRlc3RhbXCUTowLc291cmNlX2xpbmuUTowKc291cmNlX3VybJROjA10b2NfYmFja2xpbmtzlGqVAgAAjBJmb290bm90ZV9iYWNrbGlua3OUSwGMDXNlY3RudW1feGZvcm2USwGMDmRvY3RpdGxlX3hmb3JtlEsBjA1kb2NpbmZvX3hmb3JtlEsBjBJzZWN0c3VidGl0bGVfeGZvcm2USwCMDnN0cmlwX2NvbW1lbnRzlE6MDmlucHV0X2VuY29kaW5nlE6MHGlucHV0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjAZzdHJpY3SUjA1sYW5ndWFnZV9jb2RllIwCZW6UjA5wZXBfcmVmZXJlbmNlc5ROjAxwZXBfYmFzZV91cmyUjB9odHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvlIwVcGVwX2ZpbGVfdXJsX3RlbXBsYXRllIwIcGVwLSUwNGSUjA5yZmNfcmVmZXJlbmNlc5ROjAxyZmNfYmFzZV91cmyUjBtodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC+UjB10cmltX2Zvb3Rub3RlX3JlZmVyZW5jZV9zcGFjZZROjBZmaWxlX2luc2VydGlvbl9lbmFibGVklEsBjAtyYXdfZW5hYmxlZJRLAYwOYXV0b19pZF9wcmVmaXiUjAJpZJSMCWlkX3ByZWZpeJRoBowbc3RyaXBfZWxlbWVudHNfd2l0aF9jbGFzc2VzlE6MDXN0cmlwX2NsYXNzZXOUTnWMBGJvdGiUfZSMCl9vcHRpb25zVG+UjAVfYm90aJSMC19vbGRfc291cmNllIxPL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy8udG94L2RvY3Mvc3RhZ2UwX291dC9hdXRvYXBpL5SMC19uZXdfc291cmNllIwJZG9jL2RpZmZzlGpvDQAAanANAACMFmlnbm9yZV9pbl9zZWN0aW9uX25hbWWUXZQojAlob21lc3RlYWSUjANkYW+UjARmb3JrlGV1YowIcmVwb3J0ZXKUTowQaW5kaXJlY3RfdGFyZ2V0c5RdlIwRc3Vic3RpdHV0aW9uX2RlZnOUfZSMEnN1YnN0aXR1dGlvbl9uYW1lc5R9lIwIcmVmbmFtZXOUfZSMBnJlZmlkc5R9lIwHbmFtZWlkc5R9lIwJbmFtZXR5cGVzlH2UaBB9lIwNZm9vdG5vdGVfcmVmc5R9lIwNY2l0YXRpb25fcmVmc5R9lIwNYXV0b2Zvb3Rub3Rlc5RdlIwRYXV0b2Zvb3Rub3RlX3JlZnOUXZSMEHN5bWJvbF9mb290bm90ZXOUXZSMFHN5bWJvbF9mb290bm90ZV9yZWZzlF2UjAlmb290bm90ZXOUXZSMCWNpdGF0aW9uc5RdlIwSYXV0b2Zvb3Rub3RlX3N0YXJ0lEsBjBVzeW1ib2xfZm9vdG5vdGVfc3RhcnSUSwCMCmlkX2NvdW50ZXKUjAtjb2xsZWN0aW9uc5SMB0NvdW50ZXKUk5R9lIWUUpSMDnBhcnNlX21lc3NhZ2VzlF2UjBJ0cmFuc2Zvcm1fbWVzc2FnZXOUXZSMC3RyYW5zZm9ybWVylE6MC2luY2x1ZGVfbG9nlF2UjApkZWNvcmF0aW9ulE5oIWgDdWIu