0x60806040523480156200001157600080fd5b50336040518060400160405280600481526020017f4b494c4c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b494c4c0000000000000000000000000000000000000000000000000000000081525081600390816200009091906200078a565b508060049081620000a291906200078a565b50620000be600130620186a0858560016200016960201b60201c565b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001355760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200012c9190620008b6565b60405180910390fd5b6200014681620002d260201b60201c565b506200016333693f870857a3e0e38000006200039860201b60201c565b62000a9b565b8515620002ca5760008390506000839050600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603620001ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e39062000934565b60405180910390fd5b8215620002c75760008151835162000205919062000985565b118015620002105750825b15620002c6576000653287092778e360001b60001c9050600073de241205593d9fecfbe8fb9cec069e4388cc7ad660001b60001c90506349c6fae260001b60001c826200025e919062000985565b91506349c6fae260001b60001c81620002789190620009c0565b90508415620002b6576103e88810620002a057808201600001888903600480030155620002b0565b8082016000018889036004800301555b620002c3565b8181018889036003800301555b50505b5b50505b505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200040a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004019062000a4b565b60405180910390fd5b6200041e600083836200050660201b60201c565b806005600082825462000432919062000985565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004e6919062000a7e565b60405180910390a362000502600083836200050b60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059257607f821691505b602082108103620005a857620005a76200054a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005d3565b6200061e8683620005d3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200066b620006656200065f8462000636565b62000640565b62000636565b9050919050565b6000819050919050565b62000687836200064a565b6200069f620006968262000672565b848454620005e0565b825550505050565b600090565b620006b6620006a7565b620006c38184846200067c565b505050565b5b81811015620006eb57620006df600082620006ac565b600181019050620006c9565b5050565b601f8211156200073a576200070481620005ae565b6200070f84620005c3565b810160208510156200071f578190505b620007376200072e85620005c3565b830182620006c8565b50505b505050565b600082821c905092915050565b60006200075f600019846008026200073f565b1980831691505092915050565b60006200077a83836200074c565b9150826002028217905092915050565b620007958262000510565b67ffffffffffffffff811115620007b157620007b06200051b565b5b620007bd825462000579565b620007ca828285620006ef565b600060209050601f831160018114620008025760008415620007ed578287015190505b620007f985826200076c565b86555062000869565b601f1984166200081286620005ae565b60005b828110156200083c5784890151825560018201915060208501945060208101905062000815565b868310156200085c578489015162000858601f8916826200074c565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200089e8262000871565b9050919050565b620008b08162000891565b82525050565b6000602082019050620008cd6000830184620008a5565b92915050565b600082825260208201905092915050565b7f4e6f206e756c6c20616464726573730000000000000000000000000000000000600082015250565b60006200091c600f83620008d3565b91506200092982620008e4565b602082019050919050565b600060208201905081810360008301526200094f816200090d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009928262000636565b91506200099f8362000636565b9250828201905080821115620009ba57620009b962000956565b5b92915050565b6000620009cd8262000636565b9150620009da8362000636565b9250828203905081811115620009f557620009f462000956565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a33601f83620008d3565b915062000a4082620009fb565b602082019050919050565b6000602082019050818103600083015262000a668162000a24565b9050919050565b62000a788162000636565b82525050565b600060208201905062000a95600083018462000a6d565b92915050565b611f888062000aab6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d71461024f578063a9059cbb1461027f578063dd62ed3e146102af578063f2fde38b146102df576100ea565b8063715018a6146102095780638da5cb5b1461021357806395d89b4114610231576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806370a08231146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f76102fb565b60405161010491906117c5565b60405180910390f35b61012760048036038101906101229190611880565b61038d565b60405161013491906118db565b60405180910390f35b6101456103b0565b6040516101529190611905565b60405180910390f35b61017560048036038101906101709190611920565b6103ba565b60405161018291906118db565b60405180910390f35b6101936103e9565b6040516101a0919061198f565b60405180910390f35b6101c360048036038101906101be9190611880565b6103f2565b6040516101d091906118db565b60405180910390f35b6101f360048036038101906101ee91906119aa565b610429565b6040516102009190611905565b60405180910390f35b610211610472565b005b61021b610486565b60405161022891906119e6565b60405180910390f35b6102396104b0565b60405161024691906117c5565b60405180910390f35b61026960048036038101906102649190611880565b610542565b60405161027691906118db565b60405180910390f35b61029960048036038101906102949190611880565b6105b9565b6040516102a691906118db565b60405180910390f35b6102c960048036038101906102c49190611a01565b6105dc565b6040516102d69190611905565b60405180910390f35b6102f960048036038101906102f491906119aa565b610663565b005b60606003805461030a90611a70565b80601f016020809104026020016040519081016040528092919081815260200182805461033690611a70565b80156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b5050505050905090565b6000806103986106e9565b90506103a58185856106f1565b600191505092915050565b6000600554905090565b6000806103c56106e9565b90506103d28582856108ba565b6103dd858585610946565b60019150509392505050565b60006012905090565b6000806103fd6106e9565b905061041e81858561040f85896105dc565b6104199190611ad0565b6106f1565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61047a610a34565b6104846000610abb565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104bf90611a70565b80601f01602080910402602001604051908101604052809291908181526020018280546104eb90611a70565b80156105385780601f1061050d57610100808354040283529160200191610538565b820191906000526020600020905b81548152906001019060200180831161051b57829003601f168201915b5050505050905090565b60008061054d6106e9565b9050600061055b82866105dc565b9050838110156105a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059790611b76565b60405180910390fd5b6105ad82868684036106f1565b60019250505092915050565b6000806105c46106e9565b90506105d1818585610946565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61066b610a34565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106dd5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106d491906119e6565b60405180910390fd5b6106e681610abb565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790611c08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c690611c9a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108ad9190611905565b60405180910390a3505050565b60006108c684846105dc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109405781811015610932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092990611d06565b60405180910390fd5b61093f84848484036106f1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90611d72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b90611d72565b60405180910390fd5b610a2f838383610b81565b505050565b610a3c6106e9565b73ffffffffffffffffffffffffffffffffffffffff16610a5a610486565b73ffffffffffffffffffffffffffffffffffffffff1614610ab957610a7d6106e9565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ab091906119e6565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008210158015610bd7575060008110155b15610bee57610beb84600130600180610d70565b90505b81811015610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890611dde565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc29190611ad0565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d629190611905565b60405180910390a350505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790611e4a565b60405180910390fd5b848015610dea5750815b156116e9576000851561169d5760018403610eed5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600130600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b8152600401610ea596959493929190611eaf565b602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190611f25565b9050611698565b60028403610fe35760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b8152600401610f9b96959493929190611eaf565b602060405180830381865afa158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190611f25565b9050611697565b600384036110d95760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b815260040161109196959493929190611eaf565b602060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d29190611f25565b9050611696565b600484036111cf5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b815260040161118796959493929190611eaf565b602060405180830381865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190611f25565b9050611695565b600584036112c55760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b815260040161127d96959493929190611eaf565b602060405180830381865afa15801561129a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112be9190611f25565b9050611694565b600684036113bb5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b815260040161137396959493929190611eaf565b602060405180830381865afa158015611390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b49190611f25565b9050611693565b600784036114b15760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b815260040161146996959493929190611eaf565b602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190611f25565b9050611692565b600884036115a75760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b815260040161155f96959493929190611eaf565b602060405180830381865afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190611f25565b9050611691565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f295fbab6000614e20600030600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548d6040518763ffffffff1660e01b815260040161164d96959493929190611eaf565b602060405180830381865afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190611f25565b90505b5b5b5b5b5b5b5b6116e0565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b8091505061172c565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b95945050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561176f578082015181840152602081019050611754565b60008484015250505050565b6000601f19601f8301169050919050565b600061179782611735565b6117a18185611740565b93506117b1818560208601611751565b6117ba8161177b565b840191505092915050565b600060208201905081810360008301526117df818461178c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611817826117ec565b9050919050565b6118278161180c565b811461183257600080fd5b50565b6000813590506118448161181e565b92915050565b6000819050919050565b61185d8161184a565b811461186857600080fd5b50565b60008135905061187a81611854565b92915050565b60008060408385031215611897576118966117e7565b5b60006118a585828601611835565b92505060206118b68582860161186b565b9150509250929050565b60008115159050919050565b6118d5816118c0565b82525050565b60006020820190506118f060008301846118cc565b92915050565b6118ff8161184a565b82525050565b600060208201905061191a60008301846118f6565b92915050565b600080600060608486031215611939576119386117e7565b5b600061194786828701611835565b935050602061195886828701611835565b92505060406119698682870161186b565b9150509250925092565b600060ff82169050919050565b61198981611973565b82525050565b60006020820190506119a46000830184611980565b92915050565b6000602082840312156119c0576119bf6117e7565b5b60006119ce84828501611835565b91505092915050565b6119e08161180c565b82525050565b60006020820190506119fb60008301846119d7565b92915050565b60008060408385031215611a1857611a176117e7565b5b6000611a2685828601611835565b9250506020611a3785828601611835565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a8857607f821691505b602082108103611a9b57611a9a611a41565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611adb8261184a565b9150611ae68361184a565b9250828201905080821115611afe57611afd611aa1565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611b60602583611740565b9150611b6b82611b04565b604082019050919050565b60006020820190508181036000830152611b8f81611b53565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611bf2602483611740565b9150611bfd82611b96565b604082019050919050565b60006020820190508181036000830152611c2181611be5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c84602283611740565b9150611c8f82611c28565b604082019050919050565b60006020820190508181036000830152611cb381611c77565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611cf0601d83611740565b9150611cfb82611cba565b602082019050919050565b60006020820190508181036000830152611d1f81611ce3565b9050919050565b7f45524332303a207a65726f206164647265737300000000000000000000000000600082015250565b6000611d5c601383611740565b9150611d6782611d26565b602082019050919050565b60006020820190508181036000830152611d8b81611d4f565b9050919050565b7f45524332303a20616d6f756e7420657863656564732062616c616e6365000000600082015250565b6000611dc8601d83611740565b9150611dd382611d92565b602082019050919050565b60006020820190508181036000830152611df781611dbb565b9050919050565b7f4e6f206e756c6c20616464726573730000000000000000000000000000000000600082015250565b6000611e34600f83611740565b9150611e3f82611dfe565b602082019050919050565b60006020820190508181036000830152611e6381611e27565b9050919050565b6000819050919050565b6000819050919050565b6000611e99611e94611e8f84611e6a565b611e74565b61184a565b9050919050565b611ea981611e7e565b82525050565b600060c082019050611ec460008301896119d7565b611ed16020830188611ea0565b611ede60408301876118cc565b611eeb60608301866119d7565b611ef860808301856118f6565b611f0560a08301846119d7565b979650505050505050565b600081519050611f1f81611854565b92915050565b600060208284031215611f3b57611f3a6117e7565b5b6000611f4984828501611f10565b9150509291505056fea2646970667358221220d961c0280685d696ea90d80f58487b59d101e952d45e21672e9406f249ccc25f64736f6c63430008130033