60806040523480156200001157600080fd5b5060405162002a5738038062002a5783398181016040528101906200003791906200070f565b6040518060400160405280600f81526020017f4269746368506c65617365436f696e00000000000000000000000000000000008152506040518060400160405280600481526020017f42504c5a00000000000000000000000000000000000000000000000000000000815250620000c3620000b76200010260201b60201c565b6200010a60201b60201c565b8160049081620000d49190620009b1565b508060059081620000e69190620009b1565b505050620000fb3382620001ce60201b60201c565b5062000d09565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002379062000af9565b60405180910390fd5b62000254600083836200033c60201b60201c565b806003600082825462000268919062000b4a565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200031c919062000b96565b60405180910390a362000338600083836200065860201b60201c565b5050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015620003e15750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b62000423576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041a9062000c03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362000546576200048a6200065d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620004fe5750620004cf6200065d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b62000540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005379062000c75565b60405180910390fd5b62000653565b600760009054906101000a900460ff168015620005b05750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15620006525760085481620005d0846200068660201b6200067c1760201c565b620005dc919062000b4a565b111580156200060f57506009548162000600846200068660201b6200067c1760201c565b6200060c919062000b4a565b10155b62000651576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006489062000ce7565b60405180910390fd5b5b5b505050565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080fd5b6000819050919050565b620006e981620006d4565b8114620006f557600080fd5b50565b6000815190506200070981620006de565b92915050565b600060208284031215620007285762000727620006cf565b5b60006200073884828501620006f8565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007c357607f821691505b602082108103620007d957620007d86200077b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000804565b6200084f868362000804565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008926200088c6200088684620006d4565b62000867565b620006d4565b9050919050565b6000819050919050565b620008ae8362000871565b620008c6620008bd8262000899565b84845462000811565b825550505050565b600090565b620008dd620008ce565b620008ea818484620008a3565b505050565b5b81811015620009125762000906600082620008d3565b600181019050620008f0565b5050565b601f82111562000961576200092b81620007df565b6200093684620007f4565b8101602085101562000946578190505b6200095e6200095585620007f4565b830182620008ef565b50505b505050565b600082821c905092915050565b6000620009866000198460080262000966565b1980831691505092915050565b6000620009a1838362000973565b9150826002028217905092915050565b620009bc8262000741565b67ffffffffffffffff811115620009d857620009d76200074c565b5b620009e48254620007aa565b620009f182828562000916565b600060209050601f83116001811462000a29576000841562000a14578287015190505b62000a20858262000993565b86555062000a90565b601f19841662000a3986620007df565b60005b8281101562000a635784890151825560018201915060208501945060208101905062000a3c565b8683101562000a83578489015162000a7f601f89168262000973565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ae1601f8362000a98565b915062000aee8262000aa9565b602082019050919050565b6000602082019050818103600083015262000b148162000ad2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b5782620006d4565b915062000b6483620006d4565b925082820190508082111562000b7f5762000b7e62000b1b565b5b92915050565b62000b9081620006d4565b82525050565b600060208201905062000bad600083018462000b85565b92915050565b7f424c41434b5f4c49535445440000000000000000000000000000000000000000600082015250565b600062000beb600c8362000a98565b915062000bf88262000bb3565b602082019050919050565b6000602082019050818103600083015262000c1e8162000bdc565b9050919050565b7f54524144494e475f4e4f545f5354415254454400000000000000000000000000600082015250565b600062000c5d60138362000a98565b915062000c6a8262000c25565b602082019050919050565b6000602082019050818103600083015262000c908162000c4e565b9050919050565b7f464f524249440000000000000000000000000000000000000000000000000000600082015250565b600062000ccf60068362000a98565b915062000cdc8262000c97565b602082019050919050565b6000602082019050818103600083015262000d028162000cc0565b9050919050565b611d3e8062000d196000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806349bd5a5e116100b85780638da5cb5b1161007c5780638da5cb5b1461034057806395d89b411461035e578063a457c2d71461037c578063a9059cbb146103ac578063dd62ed3e146103dc578063f2fde38b1461040c57610137565b806349bd5a5e146102ac57806370a08231146102ca578063715018a6146102fa578063860a32ec1461030457806389f9a1d31461032257610137565b806323b872dd116100ff57806323b872dd146101f6578063313ce5671461022657806339509351146102445780633aa633aa14610274578063404e51291461029057610137565b806306fdde031461013c578063095ea7b31461015a57806316c021291461018a57806318160ddd146101ba5780631ab99e12146101d8575b600080fd5b610144610428565b60405161015191906112dc565b60405180910390f35b610174600480360381019061016f9190611397565b6104ba565b60405161018191906113f2565b60405180910390f35b6101a4600480360381019061019f919061140d565b6104dd565b6040516101b191906113f2565b60405180910390f35b6101c26104fd565b6040516101cf9190611449565b60405180910390f35b6101e0610507565b6040516101ed9190611449565b60405180910390f35b610210600480360381019061020b9190611464565b61050d565b60405161021d91906113f2565b60405180910390f35b61022e61053c565b60405161023b91906114d3565b60405180910390f35b61025e60048036038101906102599190611397565b610545565b60405161026b91906113f2565b60405180910390f35b61028e6004803603810190610289919061151a565b61057c565b005b6102aa60048036038101906102a59190611581565b6105f3565b005b6102b4610656565b6040516102c191906115d0565b60405180910390f35b6102e460048036038101906102df919061140d565b61067c565b6040516102f19190611449565b60405180910390f35b6103026106c5565b005b61030c6106d9565b60405161031991906113f2565b60405180910390f35b61032a6106ec565b6040516103379190611449565b60405180910390f35b6103486106f2565b60405161035591906115d0565b60405180910390f35b61036661071b565b60405161037391906112dc565b60405180910390f35b61039660048036038101906103919190611397565b6107ad565b6040516103a391906113f2565b60405180910390f35b6103c660048036038101906103c19190611397565b610824565b6040516103d391906113f2565b60405180910390f35b6103f660048036038101906103f191906115eb565b610847565b6040516104039190611449565b60405180910390f35b6104266004803603810190610421919061140d565b6108ce565b005b6060600480546104379061165a565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061165a565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000806104c5610951565b90506104d2818585610959565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600354905090565b60095481565b600080610518610951565b9050610525858285610b22565b610530858585610bae565b60019150509392505050565b60006012905090565b600080610550610951565b90506105718185856105628589610847565b61056c91906116ba565b610959565b600191505092915050565b610584610e27565b83600760006101000a81548160ff02191690831515021790555082600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816008819055508060098190555050505050565b6105fb610e27565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106cd610e27565b6106d76000610ea5565b565b600760009054906101000a900460ff1681565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461072a9061165a565b80601f01602080910402602001604051908101604052809291908181526020018280546107569061165a565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b5050505050905090565b6000806107b8610951565b905060006107c68286610847565b90508381101561080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290611760565b60405180910390fd5b6108188286868403610959565b60019250505092915050565b60008061082f610951565b905061083c818585610bae565b600191505092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108d6610e27565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093c906117f2565b60405180910390fd5b61094e81610ea5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90611884565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90611916565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b159190611449565b60405180910390a3505050565b6000610b2e8484610847565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ba85781811015610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9190611982565b60405180910390fd5b610ba78484848403610959565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490611a14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390611aa6565b60405180910390fd5b610c97838383610f69565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590611b38565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0e9190611449565b60405180910390a3610e21848484611247565b50505050565b610e2f610951565b73ffffffffffffffffffffffffffffffffffffffff16610e4d6106f2565b73ffffffffffffffffffffffffffffffffffffffff1614610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90611ba4565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561100d5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390611c10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611159576110aa6106f2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061111557506110e66106f2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90611c7c565b60405180910390fd5b611242565b600760009054906101000a900460ff1680156111c25750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561124157600854816111d48461067c565b6111de91906116ba565b111580156112015750600954816111f48461067c565b6111fe91906116ba565b10155b611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790611ce8565b60405180910390fd5b5b5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561128657808201518184015260208101905061126b565b60008484015250505050565b6000601f19601f8301169050919050565b60006112ae8261124c565b6112b88185611257565b93506112c8818560208601611268565b6112d181611292565b840191505092915050565b600060208201905081810360008301526112f681846112a3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061132e82611303565b9050919050565b61133e81611323565b811461134957600080fd5b50565b60008135905061135b81611335565b92915050565b6000819050919050565b61137481611361565b811461137f57600080fd5b50565b6000813590506113918161136b565b92915050565b600080604083850312156113ae576113ad6112fe565b5b60006113bc8582860161134c565b92505060206113cd85828601611382565b9150509250929050565b60008115159050919050565b6113ec816113d7565b82525050565b600060208201905061140760008301846113e3565b92915050565b600060208284031215611423576114226112fe565b5b60006114318482850161134c565b91505092915050565b61144381611361565b82525050565b600060208201905061145e600083018461143a565b92915050565b60008060006060848603121561147d5761147c6112fe565b5b600061148b8682870161134c565b935050602061149c8682870161134c565b92505060406114ad86828701611382565b9150509250925092565b600060ff82169050919050565b6114cd816114b7565b82525050565b60006020820190506114e860008301846114c4565b92915050565b6114f7816113d7565b811461150257600080fd5b50565b600081359050611514816114ee565b92915050565b60008060008060808587031215611534576115336112fe565b5b600061154287828801611505565b94505060206115538782880161134c565b935050604061156487828801611382565b925050606061157587828801611382565b91505092959194509250565b60008060408385031215611598576115976112fe565b5b60006115a68582860161134c565b92505060206115b785828601611505565b9150509250929050565b6115ca81611323565b82525050565b60006020820190506115e560008301846115c1565b92915050565b60008060408385031215611602576116016112fe565b5b60006116108582860161134c565b92505060206116218582860161134c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061167257607f821691505b6020821081036116855761168461162b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116c582611361565b91506116d083611361565b92508282019050808211156116e8576116e761168b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061174a602583611257565b9150611755826116ee565b604082019050919050565b600060208201905081810360008301526117798161173d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006117dc602683611257565b91506117e782611780565b604082019050919050565b6000602082019050818103600083015261180b816117cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061186e602483611257565b915061187982611812565b604082019050919050565b6000602082019050818103600083015261189d81611861565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611900602283611257565b915061190b826118a4565b604082019050919050565b6000602082019050818103600083015261192f816118f3565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061196c601d83611257565b915061197782611936565b602082019050919050565b6000602082019050818103600083015261199b8161195f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006119fe602583611257565b9150611a09826119a2565b604082019050919050565b60006020820190508181036000830152611a2d816119f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611a90602383611257565b9150611a9b82611a34565b604082019050919050565b60006020820190508181036000830152611abf81611a83565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611b22602683611257565b9150611b2d82611ac6565b604082019050919050565b60006020820190508181036000830152611b5181611b15565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611b8e602083611257565b9150611b9982611b58565b602082019050919050565b60006020820190508181036000830152611bbd81611b81565b9050919050565b7f424c41434b5f4c49535445440000000000000000000000000000000000000000600082015250565b6000611bfa600c83611257565b9150611c0582611bc4565b602082019050919050565b60006020820190508181036000830152611c2981611bed565b9050919050565b7f54524144494e475f4e4f545f5354415254454400000000000000000000000000600082015250565b6000611c66601383611257565b9150611c7182611c30565b602082019050919050565b60006020820190508181036000830152611c9581611c59565b9050919050565b7f464f524249440000000000000000000000000000000000000000000000000000600082015250565b6000611cd2600683611257565b9150611cdd82611c9c565b602082019050919050565b60006020820190508181036000830152611d0181611cc5565b905091905056fea26469706673582212206e753a6f7ef09df423d61db2f5263ae4905e6b128e56f56bfef578e3c280413664736f6c6343000812003300000000000000000000000000000000000014bddab3e51a57cff87a50000000