Simple copy protection done right :)
-
@nesta99 As far as I can tell that is not normal. I implemented this into our plugin just recently and I see that it checks for the serial in the console. It creates a file called RegistrationInfo.js in the plugin root folder (or app data folder in the compiled plugin) and stores the serial in there upon successful registration. So that file should hold your entered serial number! The script should see that running the checkOnLoad() function. Maybe check if that function is alright and not tampered with... Go check the read.me file as well...
-
@nesta99 is this happening in a compiled plugin?
It sounds like the plugin doesn't save the serial to disk, or to wrong location.
What happens in your script when the serial is confirmed?this is where I store the confirmed serial number
// Stores the file to the hard drive. In HISE it will be the project folder // but in the compiled plugin it will use the parent directory to the // user preset directory (which is usually the app data folder). Engine.dumpAsJSON(data, "../RegUdu.js");
-
@ulrik normally at the first activation, you have a registration.js file which is created in app data ... which avoids reactivation each time the vst is opened. try to create a note with .... "your license number" and name this file registration.js it should work and from there you may understand the problem
-
@yall I know
-
Alright Everyone... will check that and try again. Thanks a lot!
-
@ulrik yeah, When I open it on logic pro it happens
-
@nesta99 I think I dont have the Registration.js file. Let me create it
-
@nesta99 said in Simple copy protection done right :):
@nesta99 I think I dont have the Registration.js file. Let me create it
It should be created automatically! If it’s not being created I’d venture a guess and say that something with the script isn’t as it should be?!
-
@UrsBollhalder
I’ll send you a snippet then.. thanks -
@yall So If I got it Right, should I rename "RegistrationInfo.js" into something else?
-
@UrsBollhalder
@yall
Is it Right?//Authorisation Instance namespace Authorisation { const var SerialInput = Content.getComponent("SerialInput"); const var Description = Content.getComponent("Description"); const var GlobalMute = Synth.getMidiProcessor("GlobalMute"); const var SubmitButton = Content.getComponent("SubmitButton"); const var AuthoPage = Content.getComponent("AuthoPage"); const var Gui = Content.getComponent("Gui"); /** Checks if the serial input is valid and stores the result if successful. */ inline function onSubmitButtonControl(component, value) { if(!value) // Just execute once return; local v = SerialInput.getValue(); Console.print(v); if(SingleProductSerials.Data.contains(v)) { Console.print("Serial number found"); local data = { "Serial": v }; // Stores the file to the hard drive. In HISE it will be the project folder // but in the compiled plugin it will use the parent directory to the // user preset directory (which is usually the app data folder). Engine.dumpAsJSON(data, "../KeyReg.js"); setValidLicense(true); } else { Console.print("Invalid serial number"); Description.set("text", "INVALID SERIAL"); setValidLicense(false); } }; Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl); inline function setValidLicense(isValid) { // Do whatever you want to do here. I suggest a MIDI muter... GlobalMute.setAttribute(0, 1 - isValid); if(isValid) { Gui.showControl(1); AuthoPage.showControl(0); } else { Gui.showControl(1); AuthoPage.showControl(1); } } inline function checkOnLoad() { // Clear the input SerialInput.set("text", ""); // Load the serial from the stored file local pData = Engine.loadFromJSON("../KeyReg.js"); Console.print("Checking serial"); if(pData) { local v = pData.Serial; Gui.showControl(1); AuthoPage.showControl(0); Console.print("Restored serial: " + v); if(SingleProductSerials.Data.contains) { setValidLicense(true); return; } } setValidLicense(false); } // Call this on startup checkOnLoad(); } //SerialGenerator Instance /** This namespace contains the logic to create a new list of serials. Feel free to remove this when not needed. */ namespace SerialGenerator { inline function getNewRandomChar() { // ASCII, fuck yeah! local a = String.fromCharCode(Math.randInt(65, 90)); local b = String.fromCharCode(Math.randInt(48, 57)); return Math.random() > 0.5 ? a : b; } inline function createNewSerial() { local s = ""; s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); s += "-"; s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); s += "-"; s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); s += "-"; s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); s += getNewRandomChar(); return s; } const var NUM_SERIALS = 1000; inline function createNewSerials() { local d = []; d.reserve(NUM_SERIALS); for(i = 0; i < NUM_SERIALS; i++) { d.push(createNewSerial()); } local obj = { "Data": d }; Engine.dumpAsJSON(obj, "../Serials.js"); } // Uncomment this line to regenerate serials. //createNewSerials(); } //Serials Instance const var SingleProductSerials = { "Data": [ "O83X-AT20-040F-8MJ5", "K0XE-06PP-31T0-5EUM", "8B6P-57Y5-8D1M-NYY7", "6BPO-6YAN-QE85-AH4M", "1HP8-6XKO-K3TS-WU2V", "L0Q5-T56B-7VHW-ED11", "S0G1-5677-0NSF-0388", "H48M-6C66-QPC0-G06V", "BO6W-4W00-HJ05-360D", "0875-72E7-0K45-8B0Q", "QDXX-U33O-A021-56D0", "7D45-DB07-ODX7-I8C5", "8TID-4827-85J8-68OF", "2UBC-RJOY-H523-X6HN", "R83L-30OH-611I-5U38", "B1HN-78EG-BA2Y-CJKU", "X880-I53S-HYQW-53H2", "A1W0-EKR4-85HR-3008", "3P1U-H5K1-332C-XA7L", "2T81-8ESJ-72I3-5H3J", "N20V-2118-22OP-BX3M", "1XLA-QE5Y-AJH7-1WCQ", "MKLG-5R1E-PO18-QT6P", "Q0LP-P7K8-534K-0HNT", "4852-8101-LCK2-02UJ", "MW7Y-MIR8-5D5Q-3Y8Y", "642B-73UK-XTJQ-1Q2G", "6473-2682-RXJ5-61P5", "PS6P-OUND-KU74-P8NL", "U6GT-3714-67BD-GC5A", "50UV-NOYC-7J22-8301", "261D-YF08-F0VM-J341", "A413-85GV-5H76-1887", "5VUF-ON0D-HL5X-U2SW", "K0PB-V05H-JQ4F-RQAK", "P38G-T6F7-GW2C-O233", "FYYU-4QOF-N57T-AB82", "03MN-4K2W-IMQ8-5OX7", "U8NN-0BBB-105B-J2YL", "QNJ4-LHLE-XX5H-3U1S", "8WMD-1I74-28MX-N0CE", "450V-4J2T-4F55-866L", "KB8Q-RC25-6RNP-7L6S", "6FVI-GBGB-PQ34-S127", "FG52-1C52-8F08-SNNE", "47HV-RBI6-2LS5-FYMY", "2CU7-8E7K-O5I1-24FH", "242O-K864-OSJS-5210", "75KC-XR5W-L0BI-I556", "26JR-3634-V63S-626P", "33L2-Q53B-2CFX-XO21", "0FWS-6PS7-AR30-6T2N", "38LX-UKH4-3IYA-RWFB", "EII5-4417-6RJ8-O20B", "3085-30DA-6D73-6T08", "E684-F47M-T540-1E5L", "5U4Q-62CS-E70F-LXTY", "PMFM-T8NS-CB5U-L6A8", "6020-58ON-BSI3-2328", "8JXC-7EM5-2JR7-86RX", "MF62-218P-IP0I-0508", "R6IK-337M-DM6T-S7JY", "U36Q-12IT-KA6M-770O", "0267-37QB-EP3U-I04N", "J11X-25MJ-50P7-70VW", "8KM1-R741-K337-H461", "D3C1-DN4J-0RO3-4U1G", "686P-H533-0MV7-UG81", "R1PH-SGL6-18T6-761B", "2VLR-0GLY-72G6-G074", "86P5-R7YT-5754-4I8L", "71NJ-SPIE-RYH8-7AF0", "PRN4-2207-SS5N-34VE", "4H84-Q3NI-064B-6YH2", "QQH6-EP8D-4XMC-N465", "B674-PBB3-HV3B-K5IS", "Q5O8-8GAJ-4RI4-J6VL", "K67M-7168-T503-0OV8", "Q70Q-MX06-28X0-G7K3", "S07M-J84E-R415-K57S", "I333-YO7L-2AKM-66TQ", "SO25-3QRV-207R-2AU3", "3VT5-T2Y6-C256-GQF6", "WV3V-FU51-8344-IS26", "TX56-6B10-XHLA-82O4", "IFB2-42QM-C40O-F4BM", "137L-RQ7W-N8R5-1BT0", "A210-8DMX-2P48-8172", "0463-44BX-VFS2-0X2F", "Y7J2-V831-S537-50BP", "47F7-U34L-C1CU-WACG", "PNF1-46VR-04RX-3XBE", "QD10-0IOC-OXK0-A786", "13O4-1V34-505E-1B5K", "C86K-J337-UXPK-68V7", "0IKO-43MF-4X16-245J", "G560-QKE6-44X6-YJJ6", "4026-1VB3-7H5Q-7J6D", "CPSL-00A5-28Y5-PS26", "E51O-01NK-E4O5-C540", "6FLJ-7OYY-84GK-J2E7", "VO3D-GI2R-58DJ-353Q", "1X53-S6VO-T5X1-A8LE", "QKOM-K123-HJDL-3OJD", "KGUT-4YU5-N6HB-SG88", "WB12-X8FC-20G5-A4L1", "35A7-D5T1-UB45-W6P3", "FL1M-U8B2-7VHK-2STF", "1EE3-R2S2-7N80-H440", "T08X-4VC8-0B6O-4025", "ML34-EI48-3858-LD4L", "06PW-0751-2M03-TLT4", "LEJ8-5048-AP4F-7TS2", "G514-88M0-VAI4-007Q", "0MF5-12IA-DQXC-B33Q", "ILD2-588O-8QG1-F88B", "646L-2V7S-78D8-T484", "M161-O020-166P-3P2G", "D18V-4278-PY1R-MQY5", "1V3V-G15W-3EHX-MS4H", "5Q04-5655-4300-85MH", "4N0F-K17Q-JW43-K8O4", "4I24-4KDM-FY2X-FF5X", "FBHC-Y77E-F86N-7XF1", "831R-G71G-EM7E-UV05", "TG0P-06S5-1FJ8-NN23", "V03I-TTJ7-WTMR-6KT8", "W2BG-K0DE-M3G2-8A04", "4281-742V-T6CX-BQ84", "123F-2053-7D73-M5F1", "36MO-6C70-RMIO-U6HR", "W22R-5J33-X321-L8TB", "LV1M-P8QF-66A8-55A0", "4V2E-MBHN-1417-03AM", "08DH-01Y2-C0Q3-4568", "N35Q-68GV-EW16-20UI", "J7TN-757N-53VO-F213", "5I18-3WA0-1J31-D55J", "FH86-02PQ-1F8L-K0AN", "BXUA-2665-75Q0-51W8", "SB32-J7CX-5OJN-T5AU", "B8LP-4L5H-4CL0-R1AQ", "4U22-I167-8VO1-80Y8", "YJB1-3IPB-B0D3-7DG1", "E7E2-KINB-2P24-6480", "X4HT-02UF-64EH-516J", "ONUN-76IT-LHQG-K2E3", "D23C-5BXP-8H8D-I4I3", "186W-5686-10O3-2S6E", "KU2O-14Q7-1E6X-06EI", "0608-0A02-816V-8MMY", "WE68-CP05-QFJJ-Y63V", "W0V5-E4M2-668J-7R86", "BLK1-4GR7-PK64-TY53", "AW8P-16HJ-R47C-58V2", "6GE7-5332-1WP3-MBAQ", "MW6H-7I67-J060-ALU7", "5U5E-DH18-IS8D-61NG", "UT1C-7B7E-802V-00T6", "CQ14-CUD5-F1D4-Q5OV", "KNPP-F5A2-4527-8E8N", "2Q5Y-JE7O-4C35-VO1T", "5Q3W-1AVI-7T73-NI78", "6T37-S7B2-0XA4-WG0Q", "63OS-Q3TE-UN56-33OW", "E80Q-T7I6-DDJM-E558", "C543-4KG7-1GMY-J45S", "SFOX-0C3J-VNL6-0C1P", "SBV7-3MBC-6CPE-O615", "Q436-14C5-I216-C02F", "8B6X-TW41-451R-BJM0", "T12U-4KR1-318B-DCP0", "8U6G-E0HQ-8333-XF70", "71F3-4254-72Q3-W1S7", "ACNI-JTAQ-KT53-JJ12", "8Y06-20I3-6ARW-2AF7", "L1SS-8422-L228-86MI", "7KND-6I2B-7AHV-576G", "1UN4-JNI3-IQ87-0MV5", "836F-C713-TMGV-AUXG", "5SIA-UBFC-1U25-786I", "F6J5-40R1-1XEL-6551", "5JJD-U0LC-8H8N-4M4J", "1N0H-GD27-O7EI-4B3T", "0VU8-G584-0E57-A3PK", "0GD0-324K-13OO-3F1D", "X03G-3225-2H7K-3U33", "T6SG-G8M2-6AYF-M1K6", "YBXW-VCCI-3Y2J-0C48", "VN77-6R0T-WW2Q-KHO5", "1028-N4EP-H442-3JVF", "1M8U-JJ18-307R-J8D3", "1N64-6AAI-05R3-NUV7", "65H6-2103-KL7N-0APU", "KA85-RR7Q-2M68-N355", "4JBX-0OW6-8D6T-2057", "8S57-16H3-Q2C5-6PA2", "HDDY-85WC-88B4-3667", "K30F-JE8Y-54XF-7XEH", "3B30-H301-VJ2R-MXE8", "26J8-84B0-TY61-42IG", "PNXQ-NN0T-14P8-3XP0", "3A37-YNF7-WHFQ-1N77", "01Q3-KT53-15A3-C65B", "6JD6-603A-JW4U-Q6I7", "DHPG-L236-KD82-RS00", "7YI4-YRSY-HP8R-6J88", "KP14-7ACA-2F57-42X2", "1D76-W583-GR27-0H4W", "P1Q2-V1G5-VF0G-10EQ", "N66R-VY82-DS5Q-BQ63", "616G-0YJ8-0A1R-82QQ", "01EC-JM5V-1A3B-OS7V", "T1KS-DQ80-E4TG-77QB", "675E-GAUV-BK41-1JF6", "63LA-6J30-2WC4-3M56", "46R5-QTYF-3GUY-YHBP", "6072-NVL1-QIY2-W4SF", "6B35-1B33-83AF-7N5G", "1FW3-Q6YL-4451-ND34", "860D-34PT-43P3-6ICB", "5255-WBR8-300V-255A", "BP8I-4NOU-T888-P1E5", "BYPD-AF34-73Y2-80ST", "31CA-1446-U50Y-TF22", "7OY8-U6KM-T106-062D", "JC7J-MQ4C-6SY7-K6RS", "XU70-51QG-E74S-VQTR", "VWLB-LQ64-Q175-T8RP", "P840-C8OG-0DU6-HS3I", "VOSS-8MMD-5XAV-767E", "6X8R-3J10-3200-GVWC", "3R4P-T270-L7E3-11G4", "35LR-JON7-818N-7W86", "K4LE-4I78-F7PB-K382", "2KIM-S101-DL04-6762", "3526-02MM-AMCY-73M1", "K4L0-X453-84C2-CYLD", "7763-EA0P-0758-TWE5", "F1KC-1DDE-40S2-4O8C", "04J1-Y5V5-WN82-W0JG", "W3SY-YS5J-82HL-VL3T", "1V85-JR63-85CU-O5YK", "81K8-7L38-752N-TGT0", "BFW4-44O7-84D8-137Q", "135A-Y251-7IN8-2JWO", "L5GT-8B57-AT7U-YS85", "BSGB-3NPW-N3X7-BE0V", "2052-4F7I-VP14-5633", "INWT-13U7-BEL3-T6V1", "45LL-B0M5-8MVQ-2ODM", "G1K8-0SMG-52OI-5326", "V0WE-8JE1-0LQQ-B32U", "GC63-D4F2-HK17-1040", "P6LR-85EA-L8DR-3Y65", "3A5P-G5J0-8I0C-3RB3", "6NF3-5RVG-6TXM-O773", "KPNI-3P77-4LG7-17K3", "257S-8U2C-M8A7-3HFX", "A4DO-2HUX-022C-K2WF", "71TT-56AW-1IA3-R776", "JM87-7B3K-O02W-E71J", "1C67-Q8VG-3E82-5N1E", "8QPX-HJQ5-3N2H-8Y6C", "5DWN-RW81-3H0N-7IY2", "06E3-1W4U-WP80-7R3L", "73J8-7034-5PY0-2R2L", "LYXG-M137-OX6P-SO8Y", "X2K2-6TJ5-0S20-54CN", "236O-62YM-32S3-3BP5", "J8P3-41IY-8SAB-SGER", "6CBF-V688-Q2AC-JPIV", "0YB8-6QK7-3J8G-XOG4", "X6WQ-8P3H-5CG1-865O", "DM11-7J27-J0UP-1A2L", "41H7-P70T-4R2D-6875", "P180-7QE2-CP5F-L0GN", "5AQV-3P2U-1KA5-1A2A", "XN5S-J8R3-A1V6-0DUN", "8G6H-TCIY-87XE-H62Q", "2U4T-4210-R5SN-MGD1", "1732-7JMS-16W3-Q843", "83Q0-4D63-0Q54-1372", "JT13-MYD1-4UAG-HC76", "345S-FG1W-1380-D3X0", "32K4-3YMA-8UYK-4XCM", "AHH2-01J6-8337-I07A", "OF80-O573-401K-GV4U", "1YN6-E8TX-LS6J-5U18", "RUMT-IWO0-3IB4-BXO4", "3YG3-K586-6XQ2-O615", "M1MX-H7M1-3KJS-BJ5D", "L78U-MG4N-B6X6-855A", "H4SM-4264-6CHT-5UJ4", "4JX0-32DX-5CHX-YN21", "5UU6-36D7-W6M0-Y808", "2RJ5-AGF3-SAWQ-KT76", "1W1J-8B0W-BVE5-D3J4", "C3BR-2Y8X-S6KF-7727", "3R1A-D67X-87CG-MSU7", "380E-1641-6DD0-X2RW", "F3W5-S70E-0NQI-5LKM", "3NC8-6WU7-08Q1-17RQ", "MD0R-I46X-45T8-58Q0", "4YM6-26DY-8W3B-65P5", "W1BE-BBQ2-BE70-YIT8", "LG2K-LX27-X1ND-022P", "2O51-R5GW-IC27-VRP4", "18YO-100H-6WK2-W808", "PJQ3-BRAX-P5G2-BUY1", "6757-08S3-7JK5-5Y47", "14Q2-3C7F-P621-3H53", "24X0-J5Q8-6S28-X616", "UNJ2-88V8-058U-F7AQ", "5I10-J7D2-P14R-1XXO", "XPUK-73ON-AH77-Y713", "U6UA-T7Q3-LQ44-3ELP", "2SVM-P444-7513-P20X", "TK3Q-5M3S-NQ4K-G60P", "Q324-2CY2-5WG7-PVN0", "FXUW-N271-532A-7U1F", "MVID-UGJP-VH1L-06GJ", "7PT7-35C7-52N2-F4MY", "400G-5Q1H-0250-42XI", "7QWS-I385-285F-8UPY", "787G-R74J-284G-7OH7", "X527-JPSA-4T36-IN50", "85M0-2661-QVQ8-7CL0", "LD87-XLQI-07WL-5WJE", "04DX-4677-II5G-5N6K", "JBE3-124F-1U11-87OP", "7484-NR12-301E-QI31", "NUB1-XAS4-5475-1WA1", "PY8V-07PU-P5G6-E77P", "8HN2-01C5-8C5R-IABA", "5N8V-K780-3SP4-0J85", "UC8M-HIY7-7B01-DR10", "51EV-21FF-2Y1K-02R1", "27O3-5THE-78PJ-WAP0", "1J8D-V138-7717-V45P", "E4RQ-2R80-O83G-YWOL", "7P3I-67U2-EL25-B4WQ", "Y5L5-717S-10S6-A7K2", "1444-R420-S164-0P5T", "A10Y-7MN8-M08G-0545", "703P-1MX5-1V23-32D1", "770Y-OI7M-IWM8-KTNA", "54BX-I848-U7B5-3H2M", "UF47-BNYX-D3B1-0R8J", "HYG3-00W6-4360-254R", "5402-F150-UAJX-UM0C", "2271-07YR-W6XJ-1P7W", "EGPD-43U3-U806-I3R4", "H37C-KXR1-83NV-O02G", "U24E-1J67-07TI-NB37", "WME3-J78S-V735-W5SP", "E0XP-FQ62-2Y3B-G5U3", "8TI2-A6H6-H75K-TXOX", "P314-8471-7IIK-0245", "H7P5-WC74-TQKS-LUD5", "U6PE-W17O-8TB4-S533", "6781-83CI-I856-440C", "O038-P2FQ-JY25-1226", "5Q0A-VST8-828H-3J64", "S555-65IY-7XK0-FF67", "73K1-CWNE-88GY-2P8S", "M6G4-R83G-3MKT-37V0", "0AXN-XK00-UBM4-16M5", "6888-16NA-HU7K-NT5M", "S242-QIF1-A3J8-07Y7", "NW54-3R5B-K32K-X34E", "OI22-15J7-1O6M-X3FO", "4SY6-5H40-3RGD-GIM5", "4TNW-30YV-U4CX-M7FU", "324F-1JMD-AJ72-8733", "16LT-6368-1K00-PWAI", "POXP-2PS4-VJYF-1E74", "IQGN-131A-05GY-Y1C2", "83R7-I884-47HV-6T5J", "HGMT-317V-PN8T-YN4G", "DS86-12DG-5M42-C8NL", "4O1D-B7A7-DQAT-DX0S", "1520-7K44-XPO5-73A1", "S61H-DDW5-VPQ5-40WN", "I54W-47G5-01H3-5Q8U", "D7I2-6O5Y-ILJ1-VI3Y", "636O-Y86I-X62S-GQ15", "VEH7-13P0-7B55-0S5K", "1AC0-21Y6-U668-J558", "H5ON-71W6-EP35-TN12", "8L3S-I7K2-RD6P-0577", "33GX-3Y7F-JBP8-4HQ4", "CAOM-570M-HX87-4C6W", "5EHM-DK5P-55F1-S3B2", "L273-80BY-8WN6-DOB3", "0NA1-PW33-LH11-M563", "N2E8-K8U3-31TC-FPXO", "5824-FS4F-K2YL-4S75", "575I-6L4R-KS68-QY50", "6W45-1N0U-2H1P-FLYH", "63F6-CL6B-60M6-3S1Y", "4E81-LL2F-5X3L-0B0S", "M51L-15B2-285H-87SI", "OB5I-1F84-W4AB-0764", "53K2-4243-BXEP-5XV6", "T63T-S4X8-HPB7-ROJ7", "YSWN-CSWS-2RI1-45L2", "6D3Y-OP11-7L3B-03RE", "1A6N-R818-MIG0-MFA6", "515H-2B34-T23R-PJL2", "2TI0-4272-BP2A-001J", "6384-0C50-512M-85O3", "C1Q5-837Q-6570-2P48", "7OT4-3648-856L-T50W", "E040-6X3J-NH5W-718L", "NXPR-LJU1-BY87-17W3", "7E31-1R8E-I4XB-87O5", "PV4W-638L-C5W7-1MJX", "3UT8-80P6-8H45-0QN7", "5E3P-0HQ0-V737-006B", "02XL-2ENE-E6S4-3MT3", "556N-0X1O-1JPC-X7JG", "8700-W60H-1PJS-6231", "23IV-S013-4D6J-14RQ", "GHD1-4R24-C34F-F238", "7HI4-C6HP-F638-6UD4", "I8X1-V56C-I521-Y00K", "4T35-3L0T-00W5-0155", "NHX6-W0X8-2658-10BP", "F3B8-70BE-87BN-087F", "XO32-DEP8-V765-5CIQ", "3C47-6Q4A-I666-1B7A", "I55N-3HS0-TAD5-J7HB", "T1G2-X300-X8KS-7522", "8348-2134-0VWD-4IBG", "4842-PU01-077V-6D41", "60MO-880N-1704-NT8N", "0466-5FSM-PC51-RAE4", "AUHG-7TRH-L561-T5K8", "EDN5-W1CU-T4W5-G123", "U015-27UC-1N1U-0O78", "HOM5-U685-V05Y-R0YU", "3WQ3-YGTR-7BOR-16FN", "DRM1-Y3L8-DLDF-TWHU", "K4YS-3SML-688E-5T81", "LUUR-26KE-GH2T-DHST", "C1V3-5L37-04BS-EHI8", "18DB-16QP-XD73-8C0M", "C2X0-PXSD-TIOG-Y4KW", "Y5JO-2740-HTGM-4BF6", "B080-1034-6Q84-ED6T", "WN48-X442-MWUX-WH11", "7603-5D8N-0Y12-1K8O", "IGXX-6RM2-5532-7LIM", "J516-23M0-1IR0-KTFN", "ALST-U28D-11XU-D0FC", "T78B-146X-2EG5-4514", "E871-J45M-RRUP-6S30", "AU0K-1Y24-AY15-3FS1", "338C-773T-6Q5W-D5GM", "7C6F-56G0-VT5O-L057", "3Y2X-3T74-Q2S1-NC27", "W6WD-41P3-122O-7426", "Q57C-08BW-EX58-BY02", "8J10-2508-P522-35VI", "VWVE-750O-T47J-5SMD", "4VV8-NJA1-XI0A-331R", "82QK-L1X2-4O41-0FDG", "LRR8-L507-8M43-T400", "8F5B-CPGI-RI63-36O7", "R4E2-AOX0-701U-6SO2", "0TM3-2378-X7A2-85Y3", "5MGC-3TIR-I4M1-P1B3", "3410-82QT-7866-0PQQ", "BL0J-V7N8-53SF-F5TC", "855R-P4K2-M151-J557", "N6Y8-5513-8GSL-V703", "04M8-LH7D-5AQI-IH87", "033K-7217-XJK4-50QP", "QO6Y-8S5K-AG6N-71TA", "BV20-0Y44-VGB0-KSW0", "658O-T01X-6VEU-12D6", "1F67-278F-8HUY-BY33", "MW63-XR2E-C482-WXU8", "UU14-P41Q-KY41-4F43", "M750-4L66-YKG8-P7SX", "6278-K453-DBWR-57R8", "I64Y-5TY0-5G1E-VW3M", "606Y-T83M-5G6J-26DP", "O4AR-X16O-7DO2-K828", "8LY1-047S-D033-TOQ1", "3122-2FF4-4Y67-D4RU", "5024-27Y1-2XO0-PQNH", "F535-WDDF-11N6-V37M", "21FC-QMIA-DJO2-3V0L", "1285-F100-7MU4-7Q6I", "4KEX-TMW7-E604-JI2G", "N757-F0C8-JT8L-516X", "CVL7-C28V-3884-5420", "1J0A-QDY7-3ET1-ABB8", "I27D-KLVW-JI8Y-N3BY", "T2Q2-CYW4-4P4P-3PT8", "08U7-7Q5V-KP7P-705G", "62F4-OX4I-WN10-A2VP", "5542-II72-MPY4-87JE", "6FG3-87C4-2476-10QD", "H428-6F10-L3DY-5A1C", "3EWY-O08B-8U11-0KM3", "K44X-JRY1-J02B-CC3U", "833F-P8Q3-SR6T-21AR", "3V36-8T1M-0667-522O", "8410-C28R-0KX8-2LB0", "857A-AJC8-GQ36-30O6", "V18B-137I-842Y-6OYP", "57LJ-3L0H-0QPC-Q42G", "4342-GC83-J5UU-AP8Y", "QI2C-T5X5-I6H3-2ELD", "HHY3-2GD4-RH88-4655", "3JQ7-424K-TQ77-63X5", "K35E-XK1O-07O6-P64J", "7O41-52M8-5L66-DIK0", "4163-1FGM-8Q13-6T2W", "HW33-6M7L-84M2-XK66", "XYUT-A508-I2Q6-RY34", "LP76-BH64-5717-EE3B", "226R-L2KD-LL44-G81A", "5030-6U2Y-S7S6-F4G7", "0DT2-TO6G-240W-2G7I", "C7E4-382H-3S4F-O562", "7XU1-WD3T-ANC3-5S65", "M32K-GL08-803L-V71I", "2CR2-4222-1J37-71O0", "KVA8-3721-5W67-00TW", "8U52-NN05-3II8-5537", "4G4T-XYS5-8G4Q-B366", "7LW1-8TD3-518J-V282", "RMC5-8IAD-1225-11S7", "385I-VNLD-3H5L-3Q02", "6E3N-A2BC-M230-8Y1G", "IPMG-JC2W-060N-2624", "4M27-2OVV-MA38-LKB5", "4U84-44M6-NN07-Y75S", "2OWE-87WW-NI4L-NV22", "UR04-V770-G43Q-56E5", "8MI6-87H2-6JMH-2326", "8037-8751-5L42-XW73", "7YSG-246U-M0BM-111I", "D100-3XN5-8048-C1QU", "O048-JJY0-472K-BN16", "CE2F-T23H-W13D-UI36", "S012-67R8-Y850-0ML1", "RP1Q-55W1-FHNS-1Q8U", "6H18-168S-6633-A7WO", "FAJ8-5C2F-87EE-10EH", "547G-84C8-4AO1-VR58", "0E26-7633-BIKM-I07C", "XL6Y-262B-5272-D0MM", "D11M-8X6P-4LGX-4FH8", "WK4S-R01B-M055-5Q70", "B0G3-PJ4O-A55O-V62L", "2HXI-82EB-TQMW-Q155", "3511-DK10-B8W5-3A8C", "8GIN-6T6J-4381-M406", "I517-B5CF-CM0F-05A7", "51V5-WQGF-HTV5-E76F", "V743-3W72-R24U-TMBT", "P1VP-F82J-473N-QLQU", "AS78-D3PF-2000-F1H2", "WY8G-LUA1-4BY7-IX7O", "64AI-52S1-6E71-W224", "ID2F-18MA-255S-OFCE", "8EE1-807F-TRDP-L5YT", "0PS0-GR48-5WN3-2R11", "AD47-530P-PWC5-U7T3", "VD6A-N6Q0-KFR5-40BJ", "HM6F-2475-TPAV-MX0K", "IS58-F62O-1GOU-I5N3", "71F3-10U0-FU0H-6825", "C862-4744-QK5T-81B1", "D24O-33GB-FY08-8O1H", "7D66-2YVR-60LU-1L0W", "357N-IX31-6R67-A64Y", "QS18-82T4-TP30-EG62", "5ED1-MK8O-VPOJ-W8NT", "SJR1-EKD1-VW87-B7HO", "S4VJ-PQ0V-861H-I336", "4J43-B560-G382-E1AM", "85SY-6N48-L3L5-7S86", "53B8-6G70-2KC6-J0M2", "SE4H-40LI-74RK-BK7X", "JSB0-00VI-3V1J-53W3", "X3O0-VMF5-KRQ4-76A4", "ES55-TJ67-G77D-44KD", "O08E-DA53-V773-U8U2", "67J0-174D-0J16-2PLY", "5VBX-60GU-3YE6-2543", "P440-368B-335G-62HJ", "V5TX-NAJ7-I4IY-0IMR", "U4N8-O0I5-3U03-X502", "BDG1-476F-52U6-62I4", "T733-OBWX-I2RK-82H2", "1TH7-PM00-JQ86-1G77", "NAE8-7U67-1W80-N3M3", "VDG1-W1GK-2J31-5OQ4", "WKX3-3013-234W-J2QX", "XB63-0D23-OG47-7084", "65X6-APU3-5387-0100", "KMV0-L1JK-5SJ8-P657", "W0Y3-85D0-JLQM-22WX", "10OJ-801Y-0536-46YJ", "L665-2V6Y-2HLQ-D252", "G10H-8DE8-3672-5K07", "0R6C-AY2G-1J7Q-G8MH", "11EL-3476-T058-UN28", "0W58-JOW5-HLS2-H21J", "210C-1RJV-16QW-28K6", "K50O-IC8H-6EL6-O688", "68HR-7IQW-JAX8-X4UY", "E55W-642V-4JTO-185A", "T4BH-1A8X-213G-6O60", "ES3J-3544-BK2X-27E8", "3LK0-NQ61-C4G4-0620", "7P4Q-A11D-6T0D-L7L1", "DSFF-YF58-1T05-MT4K", "XF35-1R41-02R1-2D4V", "4KX4-1KPR-XBV3-585O", "4613-8L20-5PCY-SV0C", "8G26-UH81-L037-HB14", "0KET-6188-RS4P-S7QN", "6243-75SJ-W78R-N014", "5U1Q-670P-52PU-7AB7", "02GA-W136-L153-3R5T", "A065-R36P-XRGY-IGKX", "77M8-7FN8-N4M7-5BY7", "357U-C676-36N1-15J6", "34YP-EXGA-CI3F-QO86", "AL60-GEWU-UPE4-G23N", "C8LL-PQ31-BH32-S476", "HB2A-2C37-41B7-MRND", "L74X-13K2-VD35-610E", "6Q74-WY5B-SFX5-67OX", "U2YJ-1574-15YX-SA15", "8578-X5TV-H4IV-1B38", "77J3-5C4L-KBY7-G153", "M716-L38B-IA75-47K7", "12KO-W5C5-4F8R-TPAG", "55WW-W18W-4A27-DX4J", "L0VE-E8L4-8GIC-2R45", "U4K7-2DJL-727X-NE74", "6217-0C3A-0556-8B0J", "080H-5A48-P43D-WYX8", "0P5L-458P-GK4J-7MYX", "811Y-2H08-G744-5GKF", "33Q0-YBP4-WBU2-J2LT", "21XJ-CLQ5-XJ3C-MNBO", "RJL6-T1YI-4MO5-L507", "3P1G-87FJ-R2C1-UVW5", "753U-GRY8-1HWW-128C", "Y710-D4B0-JP5F-DQ25", "O55W-74N4-755G-RU2H", "R0C2-3M2P-386U-02M7", "1R5M-7OHG-T2MH-5E25", "BOHJ-AR72-7P8J-8W4C", "SY5G-QKJ2-32V4-WX1L", "020V-6CN0-5QU1-J636", "17I5-RBN0-34YV-5616", "NIB5-58G4-X8W2-8602", "YO31-L6KW-M6C3-3011", "55CL-3FIC-22N0-B7IX", "3L03-VR65-U4KV-D304", "2R52-67LY-RW87-7EOV", "G63B-U1D8-66YA-O3S7", "L0AT-1G60-E41P-FT58", "FM22-HVG4-XCC4-56W7", "333F-BQ28-0OTY-L04U", "H0N3-82C2-7EQ7-MJ8U", "FT65-ER35-B54E-331N", "INM2-O7O0-2A03-E0LF", "C5NW-F2XQ-IXHY-BH30", "2208-033Y-H44S-312S", "LHD6-I8RS-K03Y-V851", "O477-OED4-2671-TYK3", "707H-WFQ4-FOT3-8H43", "4FBH-6D43-J052-XL6P", "BI03-OR0G-7O0X-8188", "0S6N-1D85-T228-4L7A", "MGU2-O5W3-57JQ-LE4M", "H845-HKVK-X86B-47G5", "8L5E-GL3P-785M-D83O", "XAX3-4DJ5-8I60-AGS2", "17D6-YU63-N7MR-0S2X", "3305-GV76-XF0T-B2RC", "J877-F20R-43D8-11O5", "4L8F-G4T3-M1LX-3M10", "ILIM-23Q1-1I32-B328", "U6HD-6P65-2A7P-XTX3", "JRR5-JM51-A1DL-WRW2", "OB43-FN33-SESI-YRY7", "E7B3-3058-J43H-YU01", "14F4-021E-N55F-M170", "ME41-4WX4-3L3R-A5RU", "TDUN-NP02-8225-NJVA", "U6AC-A418-64QT-3RY1", "6RJL-2S64-25HF-6LK2", "WPBW-7CA6-UT5F-O3F2", "4475-4014-CIGN-62R7", "CI26-3D3E-GGV2-L52N", "67W6-N563-418G-72R4", "8L7V-2N1N-D4S4-6V7T", "D5F6-68J2-576B-08J3", "306J-5G5T-1WBB-74K4", "8XX5-1E0Q-52L7-67NN", "08OC-XXE4-V1H1-4I3D", "JKMR-HF27-JR82-3L84", "R8M6-4WVM-VXHM-52SK", "5K87-7CIN-8J16-60U6", "477F-33Y0-RFDV-2D3T", "2M14-AHL8-YU1K-CM72", "08PS-I4G6-6HC5-OK58", "2UB4-5I86-PU4N-2OFJ", "PV3I-22HY-R54L-7CW6", "GDVP-Y5SS-Y5H4-W742", "427G-XX4U-8OAP-C286", "5600-FTYP-4L8N-0GMW", "31C6-AOPA-6BN0-F2XN", "80C8-AXOQ-22L6-DC48", "T38B-4754-Y078-I2Q6", "IML4-807R-V5UX-W6E3", "U0VT-CV8V-03I0-1W06", "GNS0-57UU-S8AO-SR2M", "42R6-8EB7-QE8L-GLL2", "AD04-7868-U27P-4QY1", "H064-GMPP-O13L-H053", "P0R8-L505-I054-3OY8", "3F6Q-4187-0Y08-VM20", "GL01-S427-BY24-Y325", "RU8D-M116-5500-3NVA", "EWTY-K1C0-7Q8O-T32X", "8HJ4-3GLI-6AD5-80Q7", "5437-556L-IQVS-8D88", "M0KX-2CRI-QBHR-28UI", "8XG5-143R-4FX2-OO78", "J26E-4S60-LT44-EVUS", "LF4H-20RV-48DQ-30PA", "8O5P-RKX5-2MQD-5F03", "5H0V-1622-83A4-0K57", "TL78-2RM2-0XOH-5AAT", "8UX5-3N62-0W8F-BXQ4", "B883-R5JM-1K48-S65W", "33T0-878K-XSVP-F05M", "5CE5-71RS-700W-XUG3", "1602-501I-60T1-PUCT", "3PP0-3Q6T-4855-W856", "3HU5-7A3B-7E87-AWV5", "0246-OV0R-X47F-1G3X", "75S7-VM2P-E6D0-AMRA", "5G70-132Y-T1TI-8S6X", "55A6-338J-754J-72V6", "65EQ-JVMW-JIQW-2SJD", "81H0-11BX-5J7H-F5U6", "1L15-B2NS-4B7R-NP4E", "B2LB-1BTE-211H-BH76", "78YX-D2UY-OTQ5-0K2N", "JU33-SJ72-5GGC-747N", "JGBH-KSCK-0TXC-S723", "063D-U772-XG28-2878", "0G23-UO73-GLR0-38AL", "BC0L-1P22-7C04-0T30", "N625-1T4T-0452-D5G1", "C11D-4JKQ-RWL4-3I11", "53E3-0DBV-M852-04C4", "7M3L-5ADQ-4I8A-DG28", "XIBI-7LQU-8L44-T5T7", "27J1-M57V-4760-7P4K", "R5B4-EEQN-4OP6-JT1Y", "GE4M-TY31-61U2-OLP8", "5TUU-H87S-SW7A-677Y", "HJ32-T4FS-E01U-6QT6", "2Y25-GN07-1PL7-62Q7", "1141-JCAO-1RL2-6V71", "7X7U-TY5O-U203-CEIC", "H231-B4QF-4YD1-G8E7", "072V-3BX7-4D8I-J2G7", "YAIM-O6T5-1DQ8-4C0H", "C3V4-A7F3-280J-8P6L", "MW6F-I3A0-0R0R-GA28", "61DS-4IB7-Q562-76N0", "I7GS-J68X-LH1W-A3DM", "3PR7-01J6-05PY-68JT", "Y2E8-7EJ5-N55S-7TPH", "Y648-83G7-AP51-E5Q2", "Y6SX-853H-XA24-11Y4", "G414-DCR2-W2N7-J05T", "66GK-QYHL-8YD8-WJLL", "Y53U-42CC-8U31-FK52", "QBK4-F4N1-I7X2-00C2", "Y726-1SU0-N2I2-DF26", "L502-5537-M47E-6S30", "63F8-XSMG-6860-YHD6", "R48C-7WU7-0821-CBK4", "0E4U-6H3E-WE33-XSQB", "6E5Y-15N8-1BL2-210S", "24RY-3782-3VTB-SFW5", "41JX-X476-ECW7-7K10", "T8D6-Y6BQ-45NF-23A6", "6I08-3AR8-T3C8-C214", "88V3-4JT0-J237-RLN6", "82O5-8D78-1JF2-YIS8", "338L-WPJE-O30W-38X5", "Q570-256C-0UNV-5X8T", "0T65-JW03-HBH2-HW1I", "I3I8-M3S6-F2Y7-PO00", "V407-08OX-R2JH-X4CF", "6C03-L5I4-32O6-47JM", "3FQF-8A6B-G0V2-828T", "518R-V45E-S63G-A87K", "ONTW-QGUG-0723-56EC", "NCBC-6VC8-0G63-7QLA", "R71K-U668-6J1O-43B0", "0N6F-K7N7-VP05-7C1E", "86DN-5E1K-7ADE-C3M4", "G18H-LLSF-RKY3-5IWI", "3472-XRDS-KHWN-E127", "6BQK-S1V7-1JEI-2810", "433O-1QRS-8052-6O5J", "F0P6-A8YH-GB1I-2N1U", "3446-BTQ0-KM2S-2WA7", "LQ03-M86B-34HL-02WU", "S21O-PXUB-51H7-BKE8", "1D6P-Y224-72N7-D2A0", "Q0HT-47R5-I655-J70S", "XS22-6QRL-NPT6-2T0R", "48V2-460F-T4Q3-M83K", "QEOV-75TE-K012-N6PR", "I4XS-1U7G-HI5G-611D", "83OX-P3G7-E3CL-6XU0", "KQLY-6RU1-X6I5-581D", "2UFI-0A6L-R7Y6-F0X2", "810K-40B4-LNN1-0B65", "M6J8-H041-U012-KOI2", "1JBT-TJ25-2A11-1PR2", "N8K8-38K2-3P3D-I4P8", "X4NV-RM88-RP12-X474", "K665-303Y-UY0V-1O1D", "7060-15OF-844K-2KJV", "DUA3-4A0Q-X86S-B15M", "R3D8-3612-K8QV-65N6", "N3L2-J48J-N2Q4-BTRJ", "OMGG-IP56-2210-273H", "7M26-57MC-E17B-04MW", "BBV7-EOW3-KNL4-MBH0", "VX14-VY2F-3YTC-0865", "56O3-S17Y-GP8Q-4SW3", "WO82-Y8DE-N3W0-Q536", "2HKH-111Y-871W-458P", "YPVE-MBI1-MXKT-5402", "6227-V488-DK00-6328", "Q55E-BJD5-B8Y3-2IYJ", "XT64-03B2-E2JF-5555", "6A8J-HYF6-P4T4-541I", "0452-2GYB-R5RP-4FON", "NOYW-U236-WR81-F40F", "0P10-FTKC-YIP1-I2S2", "04DC-8C8I-IJXS-KY22", "M667-MQ03-5WGQ-HU5Q", "8VL1-M3DG-6RS7-2T11", "4LU5-NU8C-AQ01-M1P2", "1154-0HJA-4XB6-A1T5", "3H15-8P87-0QEW-X607", "2X08-HB1X-8481-1K16", "3YWA-7RWL-W7KO-BM54", "SWX5-N48A-U8LI-GD5A", "IMNP-SJD5-0BGK-282L", "4R34-5O87-PH67-L0SE", "18G1-Y4O6-I4L4-K6WK", "2460-J63H-8DK1-R3BP", "86TR-HVM6-6Y4W-35JJ", "678W-M1QX-U60P-ADWC", "X603-25JB-T411-R40Q", "OEG7-5G3Q-DJU5-IIOF", "R10N-41CA-QVY5-F652", "BN6G-0Q5V-PN03-ORSD", "1K54-SY43-00TY-26B8", "2WEN-XI17-B7EE-N4M3", "WF12-MF77-A7S4-1N3O", "4200-6XM3-1588-43XK", "7D8F-3O8B-7807-1140", "I467-VEC4-B0Y5-6Y34", "LJA3-3AFO-6A0B-25P3", "4005-30US-PE6X-2G1I", "L1CF-J6M8-7P7O-5AGM", "M58A-16KN-654G-YWG2", "2V0I-A518-BYXD-6XB7", "11J7-Y168-GI43-47HR", "W0U4-MJ2M-32GS-D145", "0BU2-K12P-5024-UQXO", "Q6ED-VN7N-GOS0-1H3G", "27R7-S0HF-082C-3742", "5882-143B-45TC-EIA5", "2KOO-RVKQ-3026-MNT5", "Q3M6-W1HB-2100-6640", "8022-I7N8-WYWT-M617", "CSLU-H6K2-N8LA-QSPY", "V21R-CLBI-Q713-OCM7", "O2K8-S147-GN3X-52C6", "RQM6-W851-VXO2-2O3R", "7655-5ON4-32SG-SWG7", "3W32-IM0J-N536-3NP7", "2080-B51C-A7P4-K73X", "66R8-AS0T-ROY3-EE2Y", "VH5B-0463-D4MB-7TUT", "E546-T0NM-P76N-8JN8", "GC6M-G01D-X27J-2I5P", "DE2I-BN2D-GA0Q-14J3", "5O2W-06GH-15C6-O3G0", "8F66-7Q4Q-7ON4-43Q7", "000I-SRG4-XG07-K130", "2877-4N0L-MW13-RIBK", "L2D6-R25R-3B00-FUT2", "5373-B5GS-8560-1XA5", "7PHT-56A2-5UQ4-W81O", "43FQ-V146-I8L0-5Q7R", "47N3-OO2G-P8E6-OD0T", "2V6U-42U0-LR06-W780", "PF06-6R28-QA82-Y5OP", "GQ14-G4YQ-22I5-SOXI", "414R-FKB5-46SO-XNVK", "C3W7-UQ1L-1KL7-22A4", "72HG-7UAC-V13W-BM36", "3TXC-466S-Q461-2SOL", "3O8U-58J2-J603-16T2", "SSQM-GFOK-P6V4-C611", "V01V-FGOH-F3IG-Q4U7", "L4F6-BIHT-8JEE-S83B", "UHE7-0117-H3P7-S504", "HXKY-V3X3-Q1UA-6GTW", "N54Q-E8PB-NA1F-1X64", "4M05-E2HN-1XW7-J632", "4687-2OA3-Q54E-472Q", "4RH5-0422-161K-8T4O", "GUQ3-6U6F-S4H8-J747", "88T8-CKNS-6WL7-O61P", "JM08-6W2E-612E-4HJ5", "O04L-UIC5-D558-R36J", "BI3H-0DOF-GCYI-7EP3", "K4AU-8573-KEC7-731P", "OS37-RGGC-Y10A-P8BM", "55DC-S267-C7D0-6C17", "3030-8PUS-P242-446P", "DOC0-7PL8-1W7B-1I5I", "01DV-421W-G6YJ-JI16", "QFPL-RQW2-XH08-HAT7", "ONCV-MV6V-7JD8-O8VK", "1VSO-R443-7N88-V7ME", "W62G-3226-N4W7-BT2C", "4JU0-1Q31-QGO2-WV20", "IQ88-E65N-O037-1T1R", "DP21-580D-66W4-7XH8", "608I-T34J-D6M8-868N", "72T4-TBJ2-UU7I-710N", "12A4-03KY-N567-X1H1", "66QC-G707-0L01-ABM0", "EW2F-KMO7-JV67-JLR3", "FK17-88VL-8RE7-K3A2", "3735-8IJR-0QL2-RB0V", "C58M-81F4-5466-J1WH", "52OD-0LM7-3456-E88K", "XDRX-C06W-H554-AJB7", "X87Y-22E6-334S-DJJC", "6324-L7O0-4TD0-45L0", "E4T7-NV0C-5R8W-54UV", "40V5-MGP5-0ACN-3W34", "E0XT-K05G-QFCL-513M", "RAX7-2X6O-727K-H86E", "51EN-3B77-RA8O-G4KA", "711F-708G-VQV6-8065", "41N2-CSAL-F354-1DMG", "EKA5-5220-0G1G-AS10", "N54Y-38V5-7AF5-0MUO", "4H7N-O34M-BLQI-7140", "0E2O-X27F-71PE-4B4G", "JQ12-443S-JBHF-1T8A", "B747-30BA-QC5R-4S7N", "1E66-QW6P-D7CC-O256", "B358-50V7-5MF1-BWDS", "H870-L53C-PHS8-0003", "6A41-C0RY-461F-MX6Y", "5RTH-4K56-0XL2-R6K6", "8Q83-3UO1-AIX2-2XXO", "2325-CLL6-FKNJ-U776", "AA2C-W6GI-53QM-W8OO", "0H5X-ATR3-I3KW-B7OJ", "64C4-N330-Y0L3-2U3O", "WAJT-Y327-303M-W75P", "53D0-21KC-80F6-2C21", "3307-8FX7-4SD0-17FX", "C4PX-VM27-8AG0-3T8B", "S10S-2365-D338-CX3J", "4EEB-64SD-WQIM-RJXI", "0R3B-0Q66-7281-4C0N" ] };
-
@nesta99 said in Simple copy protection done right :):
@yall So If I got it Right, should I rename "RegistrationInfo.js" into something else?
Well yes, since you renamed it into KeyReg.js in the script! But this file should get created automatically!
(Are you on my macOS?? Thinking about files and folder access restrictions, admin authorization in Catalina and stuff. I remember a case with Digital Performer by MOTU, where I couldn't save presets because of something like this...)
-
This post is deleted! -
@nesta99 I think apart from you changing names of variables and scripts, it looks about the same as the original. I personally find the renaming a bit confusing and in general leave it as is, until I really understand what goes into what and where and why...
I'd put the three namespaces in 3 separate js-files and include them onInit. Serials.js, Authorisation.js, and while needed the Serial Generator.js...
That being said, you probably want to declare the serial variable (containing all the serial numbers) before the authorization script!
When you enter one of the serials of your serials list, and the registration is successful, the RegistrationInfo.js gets created automatically in your project folder. In your case, that should be KeyReg.js!
Let me know how it goes.
-
@orange said in Simple copy protection done right :):
@staiff in
Use the latest (updated today) HISE version.
Use Authorisation.js code with Content.makeFrontInterface like below. Also don't forget to include("Serials.js") to make the function check. All of the UI elements will be activated. I tried and compiled a plugin, it works likea charm. It creates "RegistrationInfo.js" in User presets main folder. Interface code example is this;Content.makeFrontInterface(600, 500); include("Serials.js"); namespace Authorisation { const var SerialInput = Content.getComponent("SerialInput"); const var Description = Content.getComponent("Description"); const var SerialStateLabel = Content.getComponent("SerialStateLabel"); const var AuthorisationDialogue = Content.getComponent("AuthorisationDialogue"); const var GlobalMute = Synth.getMidiProcessor("GlobalMute"); /** Checks if the serial input is valid and stores the result if successful. */ inline function onSubmitButtonControl(component, value) { if(!value) // Just execute once return; local v = SerialInput.getValue(); Console.print(v); // Checks if it's in the input if(serials.Data.contains(v)) { Console.print("Serial number found"); local data = { "Serial": v }; // Stores the file to the hard drive. In HISE it will be the project folder // but in the compiled plugin it will use the parent directory to the // user preset directory (which is usually the app data folder). Engine.dumpAsJSON(data, "../RegistrationInfo.js"); setValidLicense(true); } else { Console.print("Invalid serial number"); Description.set("text", "Invalid serial number. The number you supplied does not match"); setValidLicense(false); } }; Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl); inline function setValidLicense(isValid) { // Do whatever you want to do here. I suggest a MIDI muter... GlobalMute.setAttribute(0, 1 - isValid); if(isValid) { // Change this to any other visual indication... SerialStateLabel.set("bgColour", Colours.greenyellow); AuthorisationDialogue.set("visible", false); } else { SerialStateLabel.set("bgColour", Colours.red); AuthorisationDialogue.set("visible", true); } } inline function checkOnLoad() { // Clear the input SerialInput.set("text", ""); // Load the serial from the stored file local pData = Engine.loadFromJSON("../RegistrationInfo.js"); Console.print("Checking serial"); if(pData) { local v = pData.Serial; Console.print("Restored serial: " + v); if(serials.Data.contains(v)) { setValidLicense(true); return; } } setValidLicense(false); } // Call this on startup checkOnLoad(); }
@nesta99
-
welp. im guessing simple copy protection is broken or depreciated in current HISE
worked like a charm since 2020 now...
it registers license keys does everything right then...when recompiled or reopened it says invalid serial even though it is in the registration file and said it was correct initially
Interface: Checking serial Interface: Restored serial: 4E6I-52DH-17X1-OE54 Interface: Interface: Invalid serial number
in fact it doesnt even look like its checking it after restoring basic on what the console is saying there.
again this is the exact code. exact implementation as above..worked for years now it doesnt for some reason
all gui elements are created and match changed GlobalMute to Mute for an audio mute opposed to midinamespace Authorisation { const var SerialInput = Content.getComponent("SerialInput"); const var Description = Content.getComponent("Description"); const var AuthorisationDialogue = Content.getComponent("AuthorisationDialogue"); const var Mute = Synth.getEffect("Mute"); /** Checks if the serial input is valid and stores the result if successful. */ inline function onSubmitButtonControl(component, value) { if(!value) // Just execute once return; local v = SerialInput.getValue(); Console.print(v); // Checks if it's in the input if(serials.Data.contains(v)) { Console.print("Serial number found"); local data = { "Serial": v }; // Stores the file to the hard drive. In HISE it will be the project folder // but in the compiled plugin it will use the parent directory to the // user preset directory (which is usually the app data folder). Engine.dumpAsJSON(data, "../RegistrationInfo.js"); setValidLicense(true); } else { Console.print("Invalid serial number"); Description.set("text", "Invalid serial number. The number you supplied does not match"); setValidLicense(false); } }; Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl); inline function setValidLicense(isValid) { // Do whatever you want to do here. I suggest a MIDI muter... Mute.setBypassed(value - isValid); if(isValid) { // Change this to any other visual indication... AuthorisationDialogue.set("visible", false); } else { AuthorisationDialogue.set("visible", true); } } inline function checkOnLoad() { // Clear the input SerialInput.set("text", ""); // Load the serial from the stored file local pData = Engine.loadFromJSON("../RegistrationInfo.js"); Console.print("Checking serial"); if(pData) { local v = pData.Serial; Console.print("Restored serial: " + v); if(serials.Data.contains(v)) { setValidLicense(true); return; } } setValidLicense(false); } // Call this on startup checkOnLoad(); }
-
@mwplugs haha i figured out something really weird...
so i look in the sample project etc. and reference times it has worked right.
but i discovered that for some reason now..when the submit button has save in preset enabled the whole script doesnt work. although previously it didnt matter but now it does. so if anyone runs into that take a look
-
@mwplugs Hi, so I should deactivate the saveInPreset on the Submit button to make it fully work?
-
@mwplugs Ok so, when I opened the snippet, the button is already not set as saveInPreset, and it work like a charm.
I don't know how happened to not work on your side. -
This post is deleted!