UNPKG

@opcua/for-node-red

Version:

The Node-RED node to communicate via OPC UA, powered NodeOPCUA and developed by Sterfive's team

275 lines (209 loc) 82.1 kB
<style> .mask-flag-dropdown .option-item{border:1px solid #ccc;cursor:pointer;display:inline-block;font-family:FontAwesome,sans-serif;font-size:16px;font-weight:900;margin-right:10px;padding:5px 10px;text-align:center;width:1em}.mask-flag-dropdown .option-item .checkbox{border:1px solid #ccc;content:"\f096";display:inline-block;height:20px;margin-right:5px;width:20px}.mask-flag-dropdown .option-item.selected .checkbox{content:"\f046"}.custom-select{background-color:#fff;border:1px solid #ccc;box-sizing:border-box;cursor:pointer;max-height:200px;overflow-y:auto;padding:5px;width:100%}.custom-select .custom-option{align-items:center;border-bottom:1px solid #eee;display:flex;padding:5px 10px}.custom-select .custom-option:last-child{border-bottom:none}.custom-select .custom-option .custom-checkbox{align-items:center;border:1px solid #ccc;display:flex;font-size:14px;height:20px;justify-content:center;margin-right:8px;width:20px}.custom-select .custom-option.selected .custom-checkbox{border-color:#007bff}.custom-select .custom-option .custom-checkbox:before{color:#007bff;content:"\f096";font-family:FontAwesome,sans-serif}.custom-select .custom-option.selected .custom-checkbox:before{content:"\f046"}.sterfive-combo-box{position:relative;width:100%}.sterfive-online-menu{height:auto;position:fixed;width:auto}.sterfive-input-error{border-color:var(--red-ui-form-input-border-error-color);border-style:solid;border-width:1px}.sterfive-typedInput-options{background:#fff;border-style:solid;border-width:1px;border:1px solid var(--red-ui-primary-border-color);box-sizing:border-box;max-height:350px;overflow-y:auto;position:absolute;white-space:nowrap;z-index:2000}.sterfive-typedInput-options a{align-items:center;border-bottom:1px solid;border-color:var(--red-ui-secondary-border-color);border-style:solid;border-width:1px;color:var(--red-ui-form-text-color);display:flex;font-size:13px;padding:6px 18px 6px 6px;text-decoration:none}.sterfive-typedInput-options a:hover{background:var(--red-ui-workspace-button-background-hover);text-decoration:none}.sterfive-typedInput-options a:focus{outline:none}.sterfive-typedInput-options a:active,.sterfive-typedInput-options a:focus{background:var(--red-ui-workspace-button-background-active);text-decoration:none}.sterfive-typedInput-options a input[type=checkbox]{margin:0 6px 0 0}.sterfive-typedInput-options .sterfive-typedInput-icon{margin-right:6px}.sterfive-typedInput-options .sterfive-typedInput-icon:not(.fa){background-color:var(--red-ui-primary-text-color);height:14px;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:cover;mask-size:cover;width:12px}.sterfive-combo-box .sterfive-dropdown{background-color:#fff;border:1px solid #ccc;display:none;left:0;max-height:400px;overflow-y:auto;position:absolute;top:100%;width:100%;z-index:1000}.sterfive-combo-box li:before{content:none}.sterfive-tree li.expandable:before,.sterfive-tree li.no-expandable:before{content:"\f0da";cursor:pointer;font-family:FontAwesome,sans-serif;font-size:12pt;font-weight:900;margin-right:5px}.sterfive-tree li.no-expandable:before{opacity:0}.sterfive-tree li.expanded:before{content:"\f0d7";cursor:pointer;font-family:FontAwesome,sans-serif;font-size:12pt;font-weight:900;margin-right:5px}.sterfive-tree li span.selected{border:.5px dotted #33f}.sterfive-tree .fa{color:#333;margin-right:10px}.sterfive-tree ul{list-style:none;padding-inline-start:2%}.sterfive-tree li{cursor:pointer;padding:5px}.sterfive-tree{list-style-type:none}.sterfive-tree,.sterfive-tree ol,.sterfive-tree ul{list-style-type:none;margin:0;padding:0}.sterfive-tree li:hover{background-color:#eee}.sterfive-tree li.loading:before{animation:fa-spin 1s linear infinite;content:"\f110";cursor:pointer;font-family:FontAwesome,sans-serif;font-weight:900;margin-right:5px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sterfive-tree .spinner{animation:spin .7s linear infinite;border:2px solid transparent;border-radius:50%;border-top-color:#666;display:inline-block;height:16px;width:16px}.sterfive-info{background-color:#fafad2;border-radius:10px;border-style:groove;display:block;font-size:10pt;margin:5px 0;padding:5px}.sterfive-info .ok{color:green}.sterfive-info .warning{color:darkred}.input-wrapper{border:0 solid #ccc;border-radius:5px;padding:0}.sterfive-input-group{border:1px solid #ccc;border-radius:5px;display:flex;overflow:hidden}.sterfive-input-group button,.sterfive-input-group input{border:none;outline:none;padding:10px}.sterfive-input-group input{flex:1}.sterfive-input-group button{background-color:var(--red-ui-form-button-background);color:#7b7a7a;cursor:pointer}.sterfive-input-group button:hover{background-color:var(--red-ui-secondary-background-hover)}.sterfive-info-text{color:#777;font-size:12px;margin-left:10px;margin-top:5px}.custom-checkbox{cursor:pointer;display:inline-block;font-family:FontAwesome,sans-serif;font-size:16px;font-weight:900;margin-right:10px;text-align:center;width:1em}.custom-checkbox.unchecked:before{content:"\f096"}.custom-checkbox.checked:before{content:"\f046"}.validate-cancel-buttons{background-color:#fff;position:sticky;right:0;top:0;z-index:1001}.cancel-button,.validate-button{cursor:pointer;font-size:16px;margin:5px}.sterfive-combo-box .sterfive-dropdown{position:relative}.floating-buttons{position:fixed;z-index:1003} /*# sourceMappingURL=OpcUa-Client2-FileOperation.css.map */ </style> <!-- HTML CONTENTS --> <script type="text/x-red" data-template-name="OpcUa-Client2-FileOperation"> <h3> Opc-UA FileOperation <a href="https://opcua-for-node-red.doc.sterfive.com/docs/file-operation" target="_blank" aria-label="Help" ><i class="fa fa-question"></i ></a> </h3> <div class="form-row"> <label for="node-input-name"><i class="icon-tasks"></i>Name</label> <input type="text" id="node-input-name" placeholder="enter the friendly name of the node" /> </div> <div class="form-row"> <label for="node-input-endpoint"><i class="icon-tasks"></i> Endpoint</label> <input type="text" id="node-input-endpoint" placeholder="opc.tcp://localhost:4334" /> </div> <div class="form-row"> <label for="node-input-mode">Mode</label> <select type="text" id="node-input-mode" style="width: 72%"> <option selected value="Read">Read</option> <option value="Write">Write</option> <option value="WriteAppend">Append</option> </select> </div> <!-- ont valid for mode == Read--> <div id="format-selector" class="form-row"> <label for="node-input-format"><i class="fa fa-sign-out"></i> <span data-i18n="node-red:file.label.outputas"></span></label> <select id="node-input-format" style="width: 250px"> <option value="utf8" data-i18n="node-red:file.output.utf8"></option> <option value="lines" data-i18n="node-red:file.output.lines"></option> <option value="" data-i18n="node-red:file.output.buffer"></option> <!-- not supported yet <option value="stream" data-i18n="node-red:file.output.stream"></option> --> </select> </div> <div id="encoding-spec" class="form-row form-row-file-encoding"> <label for="node-input-encoding"><i class="fa fa-flag"></i> <span data-i18n="node-red:file.label.encoding"></span></label> <select type="text" id="node-input-encoding" style="width: 250px"></select> </div> <div class="form-row"> <label for="node-input-nodeId" style="width: 100%"><i class="fa fa-tag"></i>NodeId</label> <input type="text" id="node-input-nodeId" placeholder="ns=1;s=fileNode" /> </div> <!-- <div class="form-row"> <label for="node-input-encoding">Encodeing</label> <select type="text" id="node-input-encoding" style="width: 72%"> <option selected value="Utf8">Utf-8</option> <option value="Buffer">Buffer</option> <option value="Base64">Base64</option> </select> </div> --> </script> <!-- MARKDOWN CONTENTS --> <script type="text/markdown" data-help-name="OpcUa-Client2-FileOperation"> ## OPC UA File Operation Node Perform read and write operations on OPC UA File objects that implement the FileType interface (ns=0;i=11575). This node enables interaction with files stored on OPC UA servers, supporting various read/write modes, encoding options, and output formats. ### Configuration #### NodeId - **Required**: The NodeId must reference an Object node with TypeDefinition = FileType - **Input**: Can be configured in the node or provided dynamically via `msg.nodeId` - **Format**: Supports standard NodeId formats (ns=X;i=Y) and browse paths (/ns1:FolderDemo/ns1:file.txt) #### Mode Select the operation to perform: - **Read**: Reads the complete file content from the OPC UA server - **ReadSize**: Returns only the file size in bytes without reading content - **Write**: Writes data to the file (equivalent to WriteEraseExisting) - **WriteEraseExisting**: Overwrites the entire file with new content - **WriteAppend**: Appends data to the end of the existing file #### Encoding (Read/Write) Controls character encoding for text files: - **none**: Raw binary data (default) - **setbymsg**: Use encoding specified in `msg.encoding` - **utf8, ascii, utf-16le**: Unicode encodings - **Shift_JIS, EUC-JP**: Japanese encodings - **GB2312, GBK, Big5**: Chinese/Taiwan encodings - Plus many other regional encodings (Windows, ISO, IBM, Mac, KOI8) #### Format (Read only) Output format for read operations: - **buffer**: Returns raw Buffer object (default) - **utf8**: Returns decoded string using specified encoding - **lines**: Returns array of strings, split by newline characters ### Input Message #### Read Operations ```javascript msg = { nodeId: "ns=1;s=MyFile" // Optional, overrides configured NodeId encoding: "utf8" // Optional, when encoding="setbymsg" } ``` #### Write Operations ```javascript msg = { payload: "content to write", // String, Buffer, or JSON object nodeId: "ns=1;s=MyFile", // Optional, overrides configured NodeId encoding: "utf8", // Optional, when encoding="setbymsg" }; ``` **Write Payload Types:** - **String**: Written directly (with optional encoding) - **Buffer**: Written as binary data - **Object/Array**: Automatically JSON.stringify'd - **Boolean/Number**: Converted to string ### Output Message #### Read Mode ```javascript msg = { payload: <Buffer|string|string[]> // Based on format setting } ``` #### ReadSize Mode ```javascript msg = { payload: 12345, // File size in bytes }; ``` #### Write Modes ```javascript msg = { size: 12345, // Number of bytes written }; ``` ### How It Works **Read Process:** 1. Opens the OPC UA File object 2. Reads content in optimized chunks (respects server MaxByteStringLength) 3. Automatically handles large files using streaming 4. Applies encoding/format conversion if specified 5. Returns formatted output **Write Process:** 1. Extracts and encodes data from msg.payload 2. Opens file in specified mode (Write/Append) 3. Splits data into chunks based on transport limits 4. Writes chunks sequentially to server 5. Returns final file size **Performance Optimization:** - Chunk size automatically calculated based on: - Server's MaxByteStringLength capability - Transport maxMessageSize settings - Hard limit of BinaryStream.maxByteStringLength - Streaming architecture handles files larger than memory ### Node Status - **Operating**: Reading/writing in progress - **size = X**: Operation completed successfully (X bytes) - **failed**: Operation error (check debug panel) ### Examples #### Read Text File ```javascript // Configure: Mode=Read, Format=utf8, Encoding=utf8 // Input: trigger inject // Output: msg.payload = "file contents as string" ``` #### Read CSV as Lines ```javascript // Configure: Mode=Read, Format=lines, Encoding=utf8 // Input: trigger inject // Output: msg.payload = ["line1", "line2", "line3"] ``` #### Write JSON Data ```javascript // Configure: Mode=Write, Encoding=utf8 msg.payload = { temperature: 25.5, timestamp: Date.now() }; // Result: JSON string written to file ``` #### Append Log Entry ```javascript // Configure: Mode=WriteAppend, Encoding=utf8 msg.payload = "2025-11-24 12:00:00 - New log entry\n"; // Result: Appended to existing file ``` #### Check File Size ```javascript // Configure: Mode=ReadSize // Input: trigger inject // Output: msg.payload = 4096 (bytes) ``` #### Dynamic NodeId ```javascript // Configure: NodeId = (leave empty) msg.nodeId = "/ns1:Logs/ns1:system.log"; // Read/write operation uses runtime-specified file ``` ### Error Handling Common errors: - **"nothing to write"**: msg.payload is undefined/empty - **"expecting a nodeIdString"**: Invalid nodeId format - **Failed status**: Node error contains specific OPC UA status code ### Tips 1. **Large Files**: Node automatically handles chunking - no size limits beyond server capabilities 2. **Text Files**: Use encoding="utf8" and format="utf8" for best results 3. **Binary Files**: Use encoding="none" and format="buffer" for images, executables, etc. 4. **CSV Processing**: Use format="lines" to get array of rows for easy parsing 5. **Dynamic Files**: Pass nodeId in msg for runtime file selection 6. **Append Mode**: Ideal for logging scenarios where existing data must be preserved ### Related Nodes - **OpcUa-Client2-Browse**: Discover available File objects on the server - **OpcUa-Client2-Read**: Read file metadata properties (Size, OpenCount, UserWritable) - **OpcUa-Client2-Call**: Call file methods (GetPosition, SetPosition, etc.) </script> <!-- END OF CONTENTS --> <script type="text/javascript"> function _0x351a(_0x2da851,_0x3f5b95){_0x2da851=_0x2da851-0x94;const _0x3e7cca=_0x3e7c();let _0x351af2=_0x3e7cca[_0x2da851];return _0x351af2;}function _0x3e7c(){const _0x29316e=['$toggleTreeBtn','selected','#node-input-format','space-between','20px','node-red:file.encoding.iso','toString','ISO-8859-4','Method','Get\x20Support\x20&\x20Activate\x20License','fa-question','remove','prependTo','../../icons/opcuanodeLogo.png','ISO-8859-15','#node-input-mode','node-red:file.encoding.setbymsg','browseName','<ul\x20class=\x22sterfive-tree\x22></ul>','cp860','#333','VariableType','width=1200,height=800','81zyyaps','#encoding-spec','nodeId','utf-16le','iso646jp','$tree','licence-freemium-banner','white','20388mYkDPd','sterfive-typedInput-options\x20sterfive-online-menu','mouseleave','slideDown','13px','namesToBits','.onboarding-required-banner','.spinner','licence-activation-overlay','auto','<iframe></iframe>','#f57c00','getTime','apply','cp1253','2px\x20solid\x20#28a745','messageCss','transparent','keydown','statusCode:\x20','sort','ns=0;i=47','opacity','Both','fa-list-alt','wrap','val','fa-cog','IsForward','cp1133','<strong>✅\x20Registration\x20complete</strong>\x20—\x20','browsePath','reference','10px','cp1161','tabindex','rgb(','addEventListener',':focus','567570NElyam','<div\x20class=\x22custom-select\x22></div>','value','grey','number','getItem','EUC-KR','function','<input\x20type=\x22checkbox\x22>','.red-ui-tray-content','14px','><i\x20class=\x22fa\x20','POST','placeholder','resolveParentNode','ascii','blur(10px)','file-operation','\x22]\x20is\x20not\x20set,\x20using\x20default\x20API\x20namespace.\x20Available\x20keys:\x20','nodeIds','cp869','$combo','$elementDiv','BrowseName','/config#buy','cp852','sterfive.nodeBrowser','endpointNode','15px','cp1163','Object','georgianps','node\x20id\x20or\x20\x20browse\x20path\x20comes\x20from\x20injected\x20msg\x20parameter','aliasedBrowsePath','options','NodeClass','tcvn','bannerClass','style=\x22color:#1565C0;\x20text-decoration:underline;\x20font-weight:bold\x22>','georgianacademy','blur(20px)','nsu\x20nodeId:\x20','suppressed','parent','ISO-8859-6','name','relativePath','split','ISO-8859-14','rgba(61,\x2060,\x204,\x200.525)','stopPropagation','node-red:file.encoding.windows','Your\x20trial\x20license\x20expires\x20in\x20<strong>','macromania','Unknown\x20Product','_showTypeMenu','label','<span\x20class=\x22custom-checkbox\x22></span>','<button><i\x20class=\x22fa\x20fa-eye\x22></i></button>','GB18030','<li>error\x20','64px','prev','HasProperty','Trial\x20License\x20Expired','30px','node-red:file.encoding.native','nsu','slideUp','koi8-r','<button>','licence-expiry-banner','append','top','elements','mask-image:\x20url(','none','buffer','cp874','true','background-color','/checkNodeId','#f44336','Your\x20trial\x20period\x20has\x20ended.\x20To\x20continue\x20using\x20this\x20node,\x20please\x20purchase\x20a\x20professional\x20license\x20or\x20contact\x20our\x20support\x20team\x20for\x20assistance.','height','span','mousedown.red-ui-typedInput-close-property-select','opc.tcp://opcuademo.sterfive.com:26543','ns=0;i=40','GB2312','$input','OpcUa-Client2-FileOperation','isArray','ns=0;i=35','done','setbymsg','/images/small-sterfive.png','prop','failure','8px','187024UtyRoO','macroman','each','BrowsePath','fa-text-width','checked','1202270AlinBB','currentParent','ObjectType','Organizes','referenceTypeId','join','<i>','Windows950','$selectTrigger','View','$inputGroup','_createMenu','background-color:transparent;overflow:hidden;border:3px','cp850','/support-frame.html','Big5-HKSCS','buttonHoverCss','replaceChild','underline','Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20banner\x20.','cp737','licence-activated','rgba(','node-red:file.encoding.korean','animate','ns=0;i=61','50px','#c82333','ISO-8859-8','expiryDate','NodeId','</li>','<div\x20class=\x22sterfive-info-text\x22></div>','opcua-for-nodered-last-overlay-shown','>&nbsp;\x20','opcua','next','typeDefinition','button','flex','nsuNodeID',':first','toISOString','appendTo','cp808','Renew\x20Now','trigger','!!failure!!','I\x20accept\x20to\x20switch\x20to\x20the\x20free\x20version\x20(limited\x20features)','change','Value\x20is\x20not\x20verified','right','position','</span>','licence-continue-button','messageHtml','$info','base64','apiRootUrl','push','prepend','$uiSelect','insertAfter','hasClass','<a\x20href=\x22javascript:void(0)\x22\x20title=\x22Click\x20to\x20visit\x20documentation\x22\x20style=\x22position:absolute;\x20top:10px;\x20right:10px;\x20z-index:1000;\x20color:#0066cc;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<i\x20class=\x22fa\x20fa-question-circle\x22\x20style=\x22font-size:18px;\x22></i>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</a>','requestedNodeId','DarkOrange','GET','<a\x20href=\x22','opcUaEndpoint2Config','1px\x20solid\x20#f5c6cb','#node-input-nodeId','children','docs/','relative','red-ui-typedInput-icon\x20','PROFESSIONAL','<optgroup/>','<strong>⚠️\x20Registration\x20required</strong>\x20—\x20','then','<li><i\x20class=\x22fa\x20fa-error\x22\x20style=\x22color:red;\x22></i>no\x20reference\x20!<ul></ul></li>','</strong>.\x20','cp922','map','</div>','already\x20fetched','ISO-8859-9','You\x20are\x20using\x20the\x20<strong>Free\x20Version</strong>\x20with\x20limited\x20functionality.\x20','_initMenu','all\x200.2s','GBK','#ff9800','<div>','Variable','buttonCss','#dc3545','cp1251','left','disconnect','isSelectable','sterfive-combo-box','Windows932','#f8d7da','DisplayName','TRIAL','buttonText','150px','opacity\x200.2s','cp1257','input-group','2px\x20solid\x20#ffc107','ReferenceType','sterfive.flagEditor','viscii','call','cp1250','isNaN','now','mode','$verifyBtn','24px','_hideMenu','pageX','<h2>','expandable\x20expanded','6px\x2012px','fa-folder','__parentNode','#721c24','#C0DEED','namespaceAliases','Windows949','100%','addClass','1px\x20solid\x20#ccc','empty','0\x2020px\x2050px\x20rgba(0,0,0,0.25)','forEach','data','ISO-8859-5','DodgerBlue','closest','Big5','opcua-for-node-red-fix-me','application/json','node-red:file.encoding.unicode','ISO-8859-10','Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20licence\x20banner','.custom-option','displayName','attr','find','msg','min','inputs','ISO-8859-16','koi8-u','multiple','encoding','2px\x20solid\x20#ff9800','Upgrade','url','assign','Forward','CadetBlue','ns=0;i=34','node_label_italic','Get\x20a\x20license\x20now','FREEWARE','#663c00','endpoint','replace','#555','#format-selector','thank\x20you!\x20Please\x20re-deploy\x20your\x20flows\x20to\x20activate\x20all\x20nodes.','aliased\x20browsePath:\x20','macukraine','node-red:file.encoding.misc','input[type=\x22checkbox\x22]','node','10px\x2015px','18px','statusText','background-color\x200.2s','ceil','onboarding-required-banner','5px','maccyrillic','status','maccroatian','node-red:file.encoding.mac','json','nodeId_aliased','cp1258','ISO-8859-1','/onboarding/status','fadeIn','fadeOut','OpcUa-Endpoint2','before','browse\x20path:\x20','offset','permanent','red-ui-typedInput-focus','HasChild','sterfive_opcua_nodered_doc','fetched','252664raZGuy',';\x22></i>\x20','has-node-help-widget','<option/>','ns=0;i=46','<img>','toggleClass','Inverse','ISO-8859-2','log','macturkish','pt154','updateValue','5px\x2010px','err','&times;','cp1255','setItem','<span\x20title=','maccenteuro','ISO-8859-7','mouseenter','/config','SteelBlue','target','#e9ecef','disarmClick','references','Windows-31j','DataType','hproman8','$dropdown','TypeDefinition','node-red:file.encoding.japanese','$selectLabel','nodes','Aliased\x20NodeId','<i\x20class=\x22red-ui-typedInput-icon\x20fa\x20fa-caret-down\x22></i>','cp866','bp_aliased','cp1256','mousedown','fa-object-group','Unspecified','maciceland','click','EUC-CN','preventDefault','Objects','sterfive-input-error','pointer','<a\x20href=\x22#\x22></a>','ISO-8859-3','50%','<i\x20class=\x22fa\x20fa-id-card\x22/>&nbsp;\x20','throw',':visible','40px','utf8','open','_blank','element','macgreek','cp855','Read','<i\x20class=\x22fa\x20fa-tag\x22/><i\x20class=\x22fa\x20fa-fighter-jet\x22/>&nbsp;','<i\x20class=\x22fa\x20fa-bookmark\x22/><i\x20class=\x22fa\x20fa-fighter-jet\x22/>&nbsp;','html','icon','expandable','text','Good','nodeId:\x20','pageY','<li\x20key=\x22','center','stringify','<span>','translateY(-50%)','show','Shift_JIS','sterfive-dropdown','sterfive-info','length','title','parentNode','first','css','EUC-JP','setMode','Register\x20now','16px','message','Unknown\x20bit\x20name','localeCompare','parentElement','cp1125','after','indexOf','backgroundColor','bp_indexed','#fff3cd','type','expanded','/licenceInfo','149772BeIHQF','\x20day','hide','FAILED','#495057','#2196F3','verify','<div/>','already\x20loading','li\x20>\x20.tree-text','1079925VxBRvO','nodeBrowser','removeClass','bold','startsWith','#155724','\x22\x20target=\x22_blank\x22\x20','absolute','observe','settings','ns=0;i=85','<p>','statusCode','selectedMenuItem','ns=0;i=45','00000000-0000-0000-0000-000000000000','match','column','node-red:file.encoding.taiwan','opts','tis620','koi8-ru','1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.3)','keyCode','ns=0;i=','border','fetching\x20failed\x20with\x20error','pointer-events','filter','/walk-backward','<button\x20title=\x22open\x20OPCUA\x20AddressSpace\x20Browser\x22><i\x20class=\x22fa\x20fa-sitemap\x22></i></button>','focus','error','toggle','onboarded','supportUrl','cp437','Invalid','Your\x20<strong>Professional\x20License</strong>\x20has\x20expired.\x20Please\x20renew\x20your\x20license\x20to\x20ensure\x20continued\x20access\x20to\x20support\x20and\x20updates.','isTypeRef','macintosh','EXPIRED','$menu','nodeClass','cp858','red-ui-typedInput-icon','warn','callback','RED.settings[\x22','42JDGCLX','sterfive-input-group','#1976D2','aliasedNodeId','<a>','Aliased\x20Browse\x20Path','node\x20class:\x20','dblclick','cp861','https://opcua-for-node-red.doc.sterfive.com','nodeId_nsu','#d4edda'];_0x3e7c=function(){return _0x29316e;};return _0x3e7c();}(function(_0x52eb74,_0x5e12bd){const _0x34c956=_0x351a,_0x3fd889=_0x52eb74();while(!![]){try{const _0x54f552=parseInt(_0x34c956(0x214))/0x1+-parseInt(_0x34c956(0x278))/0x2+-parseInt(_0x34c956(0x1c2))/0x3*(parseInt(_0x34c956(0x187))/0x4)+parseInt(_0x34c956(0x27e))/0x5+parseInt(_0x34c956(0x1ed))/0x6+-parseInt(_0x34c956(0x191))/0x7+parseInt(_0x34c956(0x11e))/0x8*(parseInt(_0x34c956(0x1e5))/0x9);if(_0x54f552===_0x5e12bd)break;else _0x3fd889['push'](_0x3fd889['shift']());}catch(_0x2d5596){_0x3fd889['push'](_0x3fd889['shift']());}}}(_0x3e7c,0x4f060),(function(){'use strict';const _0x4d0553=_0x351a;function _0x1e9854(_0x43c995){const _0xc6c44c=_0x351a;!_0x43c995[_0xc6c44c(0x195)]('/')&&(_0x43c995='/'+_0x43c995);const _0x1f3ccc=_0xc6c44c(0x94);let _0x217553=RED['settings'][_0x1f3ccc];if(!_0x217553){const _0x49d50b=Object['keys'](RED[_0xc6c44c(0x19a)])[_0xc6c44c(0x201)]()[_0xc6c44c(0x283)](',\x20');console[_0xc6c44c(0x1bf)](_0xc6c44c(0x1c1)+_0x1f3ccc+_0xc6c44c(0x226)+_0x49d50b),_0x217553=_0xc6c44c(0xde);}const _0xe010de=RED['settings'][_0xc6c44c(0x2b8)]||'',_0x5b7406=''+_0xe010de+_0x217553+_0x43c995;return _0x5b7406;}const _0x5c833f=()=>{const _0x164b08=_0x351a,_0xfd9587=$('.red-ui-tray-body');if(_0xfd9587[_0x164b08(0x171)]){const _0x2b8ab5=$(_0x164b08(0x1f7),{'src':_0x1e9854(_0x164b08(0x28c)),'scrolling':'no','style':_0x164b08(0x28a),'allowtransparency':_0x164b08(0x263),'width':'180px','height':_0x164b08(0x298)});_0xfd9587[_0x164b08(0x25c)](_0x2b8ab5),_0x2b8ab5[_0x164b08(0x175)]({'position':_0x164b08(0x198),'right':'20px','bottom':_0x164b08(0x179)});}},_0x217926=()=>{const _0x14c5a4=_0x351a,_0x48fd6a=$('#node-input-endpoint'),_0xdd1f3f=_0x48fd6a['val'](),_0x285525=RED[_0x14c5a4(0x141)][_0x14c5a4(0x102)](_0xdd1f3f);if(!_0x285525)return undefined;const {endpoint:_0x15af81,securityMode:_0x3cd386,securityPolicy:_0xfef17f,userIdentityType:_0x29c317,credentials:_0x38d5bc,namespaceAliases:_0x407271}=_0x285525,_0xfcd84a={'endpoint':_0x15af81,'securityMode':_0x3cd386,'securityPolicy':_0xfef17f,'userIdentityType':_0x29c317,'credentials':_0x38d5bc,'namespaceAliases':_0x407271};return _0xfcd84a;},_0x52350d=()=>{const _0x49e5e9=_0x351a,_0x101227=$('#node-input-endpoint'),_0x25f77a=_0x101227[_0x49e5e9(0x207)](),_0x2b7b12=_0x217926();if(!_0x2b7b12)return undefined;const _0x43f906=_0x2b7b12[_0x49e5e9(0xd1)];return Object[_0x49e5e9(0xf1)]({'namespaceAliases':_0x43f906,'id':_0x25f77a},_0x2b7b12);},_0x377237=()=>{return{'endpointNode':_0x52350d};};function _0x564956(_0x18af99,_0x2510ef,_0x520a57,_0x5e63cf){function _0x4749c8(_0xe40013){return _0xe40013 instanceof _0x520a57?_0xe40013:new _0x520a57(function(_0x39aab6){_0x39aab6(_0xe40013);});}return new(_0x520a57||(_0x520a57=Promise))(function(_0x512f39,_0x5c6261){const _0x164d6a=_0x351a;function _0x257444(_0x567cbf){const _0x485550=_0x351a;try{_0x137fc5(_0x5e63cf[_0x485550(0x2a2)](_0x567cbf));}catch(_0x379738){_0x5c6261(_0x379738);}}function _0x4d8429(_0x2ea18a){const _0x115e51=_0x351a;try{_0x137fc5(_0x5e63cf[_0x115e51(0x155)](_0x2ea18a));}catch(_0x1c2b85){_0x5c6261(_0x1c2b85);}}function _0x137fc5(_0x5f09ce){const _0x2403a5=_0x351a;_0x5f09ce[_0x2403a5(0x272)]?_0x512f39(_0x5f09ce[_0x2403a5(0x216)]):_0x4749c8(_0x5f09ce[_0x2403a5(0x216)])[_0x2403a5(0x9e)](_0x257444,_0x4d8429);}_0x137fc5((_0x5e63cf=_0x5e63cf[_0x164d6a(0x1fa)](_0x18af99,_0x2510ef||[]))[_0x164d6a(0x2a2)]());});}typeof SuppressedError===_0x4d0553(0x21b)?SuppressedError:function(_0x27858f,_0x456705,_0x55d9d1){const _0x2e0082=_0x4d0553;var _0x496b3a=new Error(_0x55d9d1);return _0x496b3a[_0x2e0082(0x241)]='SuppressedError',_0x496b3a[_0x2e0082(0x1b1)]=_0x27858f,_0x496b3a[_0x2e0082(0x23e)]=_0x456705,_0x496b3a;};function _0x3a046d(){return _0x564956(this,void 0x0,void 0x0,function*(){const _0x5c4d02=_0x351a,_0x2d61cd=_0x1e9854(_0x5c4d02(0x186)),_0x6c4509=yield fetch(_0x2d61cd,{'method':_0x5c4d02(0x2c1)}),_0x5b0393=new Date()[_0x5c4d02(0x2a8)](),_0xdf5129={'status':_0x5c4d02(0x18a),'type':_0x5c4d02(0xf7),'productName':_0x5c4d02(0x24a),'productVersion':'0.0.0','licenceInfo':{'licenceId':_0x5c4d02(0x1a0),'licenceType':'<unknown>','expiryDate':_0x5b0393,'onPremiseServerHost':'','expired':!![],'userCompany':'','userEmail':'','userName':''}};if(_0x6c4509[_0x5c4d02(0x10b)]!==0xc8)return console[_0x5c4d02(0x127)](_0x5c4d02(0x1ab),_0x6c4509['status'],_0x6c4509[_0x5c4d02(0x105)]),_0xdf5129;const _0x5bbbb6=yield _0x6c4509['json']();return _0x5bbbb6;});}const _0x381403=_0x4d0553(0x29f);function _0x3d6e74(){return _0x564956(this,void 0x0,void 0x0,function*(){const _0x3077ab=_0x351a;try{const _0x32a546=_0x1e9854(_0x3077ab(0x112)),_0x296cee=yield fetch(_0x32a546);if(!_0x296cee['ok'])return{'onboarded':!![]};return yield _0x296cee['json']();}catch(_0x306e84){return{'onboarded':!![]};}});}function _0x5cf222(_0x21bea6){const _0x48501a=_0x4d0553;_0x20dce6({'bannerClass':_0x48501a(0x108),'bannerCss':{'backgroundColor':_0x48501a(0x183),'borderBottom':_0x48501a(0xee)},'messageHtml':_0x48501a(0x9d)+'this\x20node\x20will\x20not\x20process\x20messages\x20until\x20you\x20'+(_0x48501a(0x2c2)+_0x21bea6+_0x48501a(0x197))+_0x48501a(0x23a)+'complete\x20registration</a>.','messageCss':{'color':_0x48501a(0xf8)},'buttonText':_0x48501a(0x178),'buttonCss':{'backgroundColor':_0x48501a(0xaa)},'buttonHoverCss':{'backgroundColor':_0x48501a(0x1f8)},'supportUrl':_0x21bea6});const _0xfcf9e=setInterval(()=>_0x564956(this,void 0x0,void 0x0,function*(){const _0x2e887b=_0x48501a;try{const _0x54fdec=yield _0x3d6e74();if(_0x54fdec['onboarded']){clearInterval(_0xfcf9e);const _0x20b5e6=$(_0x2e887b(0x1f3));_0x20b5e6[_0x2e887b(0x171)]>0x0&&(_0x20b5e6[_0x2e887b(0x175)]({'backgroundColor':_0x2e887b(0x1cd),'borderBottom':_0x2e887b(0x1fc)}),_0x20b5e6[_0x2e887b(0xe6)](_0x2e887b(0x269))['html'](_0x2e887b(0x20b)+_0x2e887b(0xfd)),_0x20b5e6['find']('span')[_0x2e887b(0x175)]({'color':_0x2e887b(0x196)}),_0x20b5e6[_0x2e887b(0xe6)](_0x2e887b(0x2a4))['remove'](),setTimeout(()=>{const _0x10bfd1=_0x2e887b;_0x20b5e6[_0x10bfd1(0x258)](0x12c,()=>_0x20b5e6['remove']());},0x1388));}}catch(_0x42d0bf){}}),0xbb8),_0x34cd46=new MutationObserver(()=>{const _0x1596ee=_0x48501a;$('.onboarding-required-banner')['length']===0x0&&(clearInterval(_0xfcf9e),_0x34cd46[_0x1596ee(0xb1)]());}),_0x2ef441=$(_0x48501a(0x21d))['first']();_0x2ef441[_0x48501a(0x171)]>0x0&&_0x2ef441[0x0]&&_0x34cd46[_0x48501a(0x199)](_0x2ef441[0x0],{'childList':!![],'subtree':!![]});}function _0x395e84(){return _0x564956(this,arguments,void 0x0,function*(_0x425a51={}){const _0x32ecb5=_0x351a,_0xfa3f7a=_0x1e9854(_0x32ecb5(0x22c)),{delay:delay=0x5dc,supportUrl:supportUrl=_0xfa3f7a,shouldShowOverlay:shouldShowOverlay=_0x2b9208=>_0x2b9208[_0x32ecb5(0x10b)]===_0x32ecb5(0x1ba)&&_0x2b9208[_0x32ecb5(0x184)]==='TRIAL'}=_0x425a51;try{const _0x1e91a6=yield _0x3d6e74();if(!_0x1e91a6[_0x32ecb5(0x1b3)])return yield _0x5907b1(Math[_0x32ecb5(0xe8)](delay,0x1f4)),_0x5cf222(_0x1e9854(_0x32ecb5(0x134))),!![];const _0x35d6d5=yield _0x3a046d();if(shouldShowOverlay(_0x35d6d5)){const _0x476510=Date[_0x32ecb5(0xc4)](),_0x208108=parseInt(localStorage[_0x32ecb5(0x219)](_0x381403)||'0',0xa),_0x223528=0x3c*0x3c*0x3e8;return _0x476510-_0x208108>_0x223528?(yield _0x5907b1(delay),_0x45f89c(supportUrl),localStorage[_0x32ecb5(0x12f)](_0x381403,_0x476510[_0x32ecb5(0x1d4)]())):_0x1b491d(supportUrl),!![];}if(_0x35d6d5[_0x32ecb5(0x184)]===_0x32ecb5(0xb7)&&_0x35d6d5[_0x32ecb5(0x10b)]!=='EXPIRED'){const _0x55a063=_0x1f84d5(_0x35d6d5);if(_0x55a063<=0xa&&_0x55a063>0x0)return yield _0x5907b1(delay),_0x3a0477(supportUrl,_0x55a063),!![];}if(_0x35d6d5[_0x32ecb5(0x184)]===_0x32ecb5(0x9b)&&_0x35d6d5[_0x32ecb5(0x10b)]==='EXPIRED')return yield _0x5907b1(delay),_0x48c4c5(supportUrl),!![];return![];}catch(_0x563306){return console[_0x32ecb5(0x1b1)]('Failed\x20to\x20check\x20licence\x20status:',_0x563306),![];}});}function _0x45f89c(_0x36cd37,_0x46dec1=0xbb8){const _0xcbff21=_0x4d0553,_0x1ea0c8=$(_0xcbff21(0x21d))[_0xcbff21(0x174)]();if(_0x1ea0c8[_0xcbff21(0x171)]===0x0){console[_0xcbff21(0x1bf)]('Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20licence\x20overlay');return;}const _0x349021=$(_0xcbff21(0xab),{'class':_0xcbff21(0x1f5),'css':{'position':_0xcbff21(0x198),'top':0x0,'left':0x0,'right':0x0,'bottom':0x0,'zIndex':0x2710,'backgroundColor':_0x1ea0c8['css'](_0xcbff21(0x264))[_0xcbff21(0xfa)](_0xcbff21(0x211),_0xcbff21(0x294))[_0xcbff21(0xfa)](')',',\x200.7)'),'backdropFilter':_0xcbff21(0x224),'WebkitBackdropFilter':_0xcbff21(0x224),'display':_0xcbff21(0x2a5),'flexDirection':_0xcbff21(0x1a2),'alignItems':_0xcbff21(0x169),'justifyContent':_0xcbff21(0x169),'padding':_0xcbff21(0x157)}}),_0x860227=$(_0xcbff21(0xab),{'css':{'backgroundColor':'rgba(255,\x20255,\x20255,\x200.9)','backdropFilter':'blur(20px)','WebkitBackdropFilter':_0xcbff21(0x23c),'borderRadius':_0xcbff21(0x179),'padding':_0xcbff21(0x157),'maxWidth':'500px','textAlign':_0xcbff21(0x169),'boxShadow':_0xcbff21(0xd7),'border':_0xcbff21(0x1a7)}}),_0x493136=$(_0xcbff21(0x123),{'src':_0x1e9854(_0xcbff21(0x274)),'css':{'maxWidth':_0xcbff21(0xb9),'height':_0xcbff21(0x1f6),'marginBottom':_0xcbff21(0x1d2)}}),_0x46d745=$(_0xcbff21(0xab),{'css':{'fontSize':_0xcbff21(0x251),'marginBottom':_0xcbff21(0x1d2)}})[_0xcbff21(0x164)]('⚠️'),_0x462ffd=$(_0xcbff21(0xca),{'css':{'color':_0xcbff21(0x266),'fontSize':_0xcbff21(0xc7),'fontWeight':_0xcbff21(0x194),'marginBottom':_0xcbff21(0x230)}})['text'](_0xcbff21(0x254)),_0x4b4476=$(_0xcbff21(0x19c),{'css':{'color':_0xcbff21(0x1e2),'fontSize':_0xcbff21(0x179),'lineHeight':'1.6','marginBottom':_0xcbff21(0x255)}})[_0xcbff21(0x161)](_0xcbff21(0x267)),_0x27d9c5=$('<button>',{'css':{'backgroundColor':'#2196F3','color':_0xcbff21(0x1ec),'border':_0xcbff21(0x260),'padding':'15px\x2030px','fontSize':_0xcbff21(0x179),'fontWeight':'bold','borderRadius':_0xcbff21(0x277),'cursor':_0xcbff21(0x150),'marginBottom':'15px','width':_0xcbff21(0xd3),'transition':_0xcbff21(0x106)}})[_0xcbff21(0x164)](_0xcbff21(0x1d7))['on']('mouseenter',function(){const _0x3bb4c3=_0xcbff21;$(this)[_0x3bb4c3(0x175)]('backgroundColor',_0x3bb4c3(0x1c4));})['on']('mouseleave',function(){const _0x103f59=_0xcbff21;$(this)['css'](_0x103f59(0x181),_0x103f59(0x18c));})['on'](_0xcbff21(0x14b),()=>{const _0x537632=_0xcbff21;window[_0x537632(0x159)](_0x36cd37,_0x537632(0x15a),_0x537632(0x1e4));}),_0x27ac38=$(_0xcbff21(0x25a),{'class':_0xcbff21(0x2b4),'css':{'backgroundColor':'transparent','color':_0xcbff21(0xfb),'border':_0xcbff21(0xd5),'padding':'10px\x2020px','fontSize':_0xcbff21(0x21e),'borderRadius':'8px','cursor':'pointer','marginTop':_0xcbff21(0x20e),'width':_0xcbff21(0xd3),'transition':_0xcbff21(0xa8),'display':_0xcbff21(0x260)}})[_0xcbff21(0x164)](_0xcbff21(0x2ae))['on']('mouseenter',function(){const _0x16093a=_0xcbff21;$(this)[_0x16093a(0x175)]({'backgroundColor':'rgba(0,\x200,\x200,\x200.05)','borderColor':'#999'});})['on']('mouseleave',function(){const _0x11f473=_0xcbff21;$(this)[_0x11f473(0x175)]({'backgroundColor':_0x11f473(0x1fe),'borderColor':'#ccc'});})['on'](_0xcbff21(0x14b),()=>{const _0x1f8804=_0xcbff21;_0x349021[_0x1f8804(0x114)](0x12c,()=>{const _0xc3cc3d=_0x1f8804;_0x349021[_0xc3cc3d(0x1d9)]();});});setTimeout(()=>{const _0x54927f=_0xcbff21;_0x27ac38[_0x54927f(0x113)]();},_0x46dec1),_0x860227[_0xcbff21(0x25c)](_0x493136),_0x860227['append'](_0x46d745),_0x860227[_0xcbff21(0x25c)](_0x462ffd),_0x860227[_0xcbff21(0x25c)](_0x4b4476),_0x860227[_0xcbff21(0x25c)](_0x27d9c5),_0x860227[_0xcbff21(0x25c)](_0x27ac38),_0x349021[_0xcbff21(0x25c)](_0x860227),_0x1ea0c8[_0xcbff21(0x175)](_0xcbff21(0x2b2),_0xcbff21(0x99)),_0x1ea0c8['append'](_0x349021),window[_0xcbff21(0x212)](_0xcbff21(0x17a),function _0x46dfe7(_0x46e85d){const _0x9e9587=_0xcbff21;_0x46e85d[_0x9e9587(0xd9)]&&_0x46e85d[_0x9e9587(0xd9)]['type']===_0x9e9587(0x293)&&(_0x349021[_0x9e9587(0x114)](0x12c,()=>{const _0x4f6512=_0x9e9587;_0x349021[_0x4f6512(0x1d9)]();}),window['removeEventListener'](_0x9e9587(0x17a),_0x46dfe7));});}function _0x5907b1(_0x260f9b){return new Promise(_0x30864c=>setTimeout(_0x30864c,_0x260f9b));}function _0x1f84d5(_0x33ea95){const _0x46de4b=_0x4d0553,_0x549956=_0x33ea95['licenceInfo'][_0x46de4b(0x29b)];if(!_0x549956||_0x549956===_0x46de4b(0x119))return Infinity;const _0x2fdcda=new Date(_0x549956),_0x2ac5a8=new Date(),_0x5d6fb2=_0x2fdcda[_0x46de4b(0x1f9)]()-_0x2ac5a8[_0x46de4b(0x1f9)](),_0x137005=Math[_0x46de4b(0x107)](_0x5d6fb2/(0x3e8*0x3c*0x3c*0x18));return _0x137005;}function _0x3a0477(_0x6c9883,_0xa6eb1d){const _0x3ec30e=_0x4d0553,_0x26c45e=$('.red-ui-tray-content')[_0x3ec30e(0x174)]();if(_0x26c45e[_0x3ec30e(0x171)]===0x0){console[_0x3ec30e(0x1bf)](_0x3ec30e(0xe2));return;}if(_0x26c45e[_0x3ec30e(0xe6)]('.licence-expiry-banner')['length']>0x0)return;const _0x1718bf=$(_0x3ec30e(0xab),{'class':_0x3ec30e(0x25b),'css':{'position':_0x3ec30e(0x99),'backgroundColor':_0x3ec30e(0x183),'borderBottom':_0x3ec30e(0xbd),'padding':'12px\x2050px\x2012px\x2015px','display':'flex','alignItems':_0x3ec30e(0x169),'gap':'12px','boxShadow':'0\x202px\x208px\x20rgba(0,0,0,0.1)','zIndex':0x3e8}}),_0x24bd59=$(_0x3ec30e(0xab),{'css':{'fontSize':_0x3ec30e(0x1d2),'flexShrink':0x0}})[_0x3ec30e(0x164)]('⚠️'),_0x24cef2=$(_0x3ec30e(0xab),{'css':{'flex':0x1,'fontSize':_0x3ec30e(0x21e),'color':'#856404'}}),_0x140f02=$('<span>',{'css':{'fontWeight':'500'}})[_0x3ec30e(0x161)](_0x3ec30e(0x248)+_0xa6eb1d+_0x3ec30e(0x188)+(_0xa6eb1d!==0x1?'s':'')+_0x3ec30e(0xa0)),_0xf15d28=$(_0x3ec30e(0x1c6),{'href':'#','css':{'color':_0x3ec30e(0x18c),'textDecoration':_0x3ec30e(0x290),'cursor':'pointer'}})['text'](_0x3ec30e(0xf6))['on'](_0x3ec30e(0x14b),_0x3dae06=>{const _0x551a3d=_0x3ec30e;_0x3dae06[_0x551a3d(0x14d)](),window['open'](_0x6c9883,_0x551a3d(0x15a),_0x551a3d(0x1e4));});_0x24cef2[_0x3ec30e(0x25c)](_0x140f02),_0x24cef2[_0x3ec30e(0x25c)](_0xf15d28);const _0x5c23bf=$(_0x3ec30e(0x25a),{'css':{'position':_0x3ec30e(0x198),'right':_0x3ec30e(0x20e),'top':_0x3ec30e(0x153),'transform':_0x3ec30e(0x16c),'backgroundColor':_0x3ec30e(0x1fe),'border':'none','fontSize':_0x3ec30e(0x1d2),'color':'#856404','cursor':_0x3ec30e(0x150),'padding':_0x3ec30e(0x12b),'lineHeight':0x1,'opacity':0.7,'transition':_0x3ec30e(0xba)}})[_0x3ec30e(0x161)](_0x3ec30e(0x12d))['on'](_0x3ec30e(0x133),function(){const _0x2ac460=_0x3ec30e;$(this)[_0x2ac460(0x175)](_0x2ac460(0x203),0x1);})['on'](_0x3ec30e(0x1ef),function(){const _0x5ae814=_0x3ec30e;$(this)[_0x5ae814(0x175)](_0x5ae814(0x203),0.7);})['on'](_0x3ec30e(0x14b),()=>{_0x1718bf['slideUp'](0xc8,()=>{const _0x595bd9=_0x351a;_0x1718bf[_0x595bd9(0x1d9)]();});});_0x1718bf['append'](_0x24bd59),_0x1718bf[_0x3ec30e(0x25c)](_0x24cef2),_0x1718bf[_0x3ec30e(0x25c)](_0x5c23bf),_0x26c45e[_0x3ec30e(0x2ba)](_0x1718bf);}function _0x20dce6(_0x1c4120){const _0x3e8b10=_0x4d0553,_0x2ed58e=$(_0x3e8b10(0x21d))['first']();if(_0x2ed58e[_0x3e8b10(0x171)]===0x0){console[_0x3e8b10(0x1bf)](_0x3e8b10(0x291)+_0x1c4120[_0x3e8b10(0x239)]);return;}if(_0x2ed58e[_0x3e8b10(0xe6)]('.'+_0x1c4120[_0x3e8b10(0x239)])[_0x3e8b10(0x171)]>0x0)return;const _0x1448c1=$(_0x3e8b10(0xab),{'class':_0x1c4120[_0x3e8b10(0x239)],'css':Object[_0x3e8b10(0xf1)]({'position':_0x3e8b10(0x99),'padding':_0x3e8b10(0x103),'display':_0x3e8b10(0x2a5),'alignItems':_0x3e8b10(0x169),'justifyContent':_0x3e8b10(0x1d1),'gap':_0x3e8b10(0x230),'zIndex':0x3e8},_0x1c4120['bannerCss'])}),_0x1344fa=$(_0x3e8b10(0xab),{'css':Object[_0x3e8b10(0xf1)]({'fontSize':_0x3e8b10(0x21e)},_0x1c4120[_0x3e8b10(0x1fd)])}),_0x5abe1e=$(_0x3e8b10(0x16b))[_0x3e8b10(0x161)](_0x1c4120[_0x3e8b10(0x2b5)]);_0x1344fa['append'](_0x5abe1e);const _0x27039c=$(_0x3e8b10(0x25a),{'css':Object['assign']({'color':_0x3e8b10(0x1ec),'border':_0x3e8b10(0x260),'padding':_0x3e8b10(0xcc),'fontSize':_0x3e8b10(0x1f1),'fontWeight':'bold','borderRadius':_0x3e8b10(0x109),'cursor':'pointer','flexShrink':0x0,'transition':'background-color\x200.2s'},_0x1c4120[_0x3e8b10(0xad)])})['text'](_0x1c4120[_0x3e8b10(0xb8)])['on'](_0x3e8b10(0x133),function(){const _0x2c3d46=_0x3e8b10;$(this)[_0x2c3d46(0x175)](_0x1c4120[_0x2c3d46(0x28e)]);})['on']('mouseleave',function(){const _0x20f98b=_0x3e8b10;$(this)[_0x20f98b(0x175)](_0x1c4120[_0x20f98b(0xad)]);})['on'](_0x3e8b10(0x14b),_0x513764=>{const _0x54191b=_0x3e8b10;_0x513764[_0x54191b(0x14d)](),window[_0x54191b(0x159)](_0x1c4120[_0x54191b(0x1b4)],_0x54191b(0x15a),_0x54191b(0x1e4));});_0x1448c1['append'](_0x1344fa),_0x1448c1['append'](_0x27039c),_0x2ed58e[_0x3e8b10(0x2ba)](_0x1448c1);}function _0x1b491d(_0x36da8c){const _0x1f30c2=_0x4d0553;_0x20dce6({'bannerClass':_0x1f30c2(0x1eb),'bannerCss':{'backgroundColor':_0x1f30c2(0x137),'borderBottom':'1px\x20solid\x20#ced4da'},'messageHtml':_0x1f30c2(0xa6),'messageCss':{'color':_0x1f30c2(0x18b)},'buttonText':_0x1f30c2(0xef),'buttonCss':{'backgroundColor':'#2196F3'},'buttonHoverCss':{'backgroundColor':_0x1f30c2(0x1c4)},'supportUrl':_0x36da8c});}function _0x48c4c5(_0x1edfe3){const _0x153488=_0x4d0553;_0x20dce6({'bannerClass':'licence-prof-expired-banner','bannerCss':{'backgroundColor':_0x153488(0xb5),'borderBottom':_0x153488(0x95)},'messageHtml':_0x153488(0x1b7),'messageCss':{'color':_0x153488(0xcf)},'buttonText':_0x153488(0x2ab),'buttonCss':{'backgroundColor':_0x153488(0xae)},'buttonHoverCss':{'backgroundColor':_0x153488(0x299)},'supportUrl':_0x1edfe3});}const _0x1c1846=_0x4d0553(0x271),_0x21e276=_0x4d0553(0x297),_0x4a1cb1=_0x4d0553(0x202),_0x4b005b=_0x4d0553(0x122),_0xad0b6=_0x4d0553(0xf4),_0x57c9f4=_0x4d0553(0x19f),_0x4f5470=_0x4d0553(0x26c);var _0x29da0c;(function(_0x3261f9){const _0x5ec541=_0x4d0553;_0x3261f9[_0x3261f9[_0x5ec541(0xf2)]=0x0]=_0x5ec541(0xf2),_0x3261f9[_0x3261f9[_0x5ec541(0x125)]=0x1]=_0x5ec541(0x125),_0x3261f9[_0x3261f9[_0x5ec541(0x204)]=0x2]=_0x5ec541(0x204),_0x3261f9[_0x3261f9['Invalid']=0x3]=_0x5ec541(0x1b6);}(_0x29da0c||(_0x29da0c={})));var _0x2ee42d;(function(_0x5d2080){const _0x48505e=_0x4d0553;_0x5d2080[_0x5d2080[_0x48505e(0x149)]=0x0]=_0x48505e(0x149),_0x5d2080[_0x5d2080['Object']=0x1]=_0x48505e(0x232),_0x5d2080[_0x5d2080['Variable']=0x2]=_0x48505e(0xac),_0x5d2080[_0x5d2080['Method']=0x4]=_0x48505e(0x1d6),_0x5d2080[_0x5d2080['ObjectType']=0x8]='ObjectType',_0x5d2080[_0x5d2080[_0x48505e(0x1e3)]=0x10]=_0x48505e(0x1e3),_0x5d2080[_0x5d2080[_0x48505e(0xbe)]=0x20]=_0x48505e(0xbe),_0x5d2080[_0x5d2080[_0x48505e(0x13b)]=0x40]=_0x48505e(0x13b),_0x5d2080[_0x5d2080[_0x48505e(0x287)]=0x80]=_0x48505e(0x287);}(_0x2ee42d||(_0x2ee42d={})));var _0x149018;(function(_0x1b194c){const _0x34c6c4=_0x4d0553;_0x1b194c[_0x1b194c[_0x34c6c4(0x232)]=0x1]=_0x34c6c4(0x232),_0x1b194c[_0x1b194c[_0x34c6c4(0xac)]=0x2]='Variable',_0x1b194c[_0x1b194c[_0x34c6c4(0x1d6)]=0x4]=_0x34c6c4(0x1d6),_0x1b194c[_0x1b194c['ObjectType']=0x8]=_0x34c6c4(0x280),_0x1b194c[_0x1b194c[_0x34c6c4(0x1e3)]=0x10]=_0x34c6c4(0x1e3),_0x1b194c[_0x1b194c[_0x34c6c4(0xbe)]=0x20]='ReferenceType',_0x1b194c[_0x1b194c[_0x34c6c4(0x13b)]=0x40]='DataType',_0x1b194c[_0x1b194c['View']=0x80]=_0x34c6c4(0x287);}(_0x149018||(_0x149018={})));function _0x828de5(_0x26f0de,_0x525f2c){const _0x56a1eb=_0x4d0553;if(typeof _0x525f2c==='number')return _0x525f2c;const _0x26cfde=parseInt(_0x525f2c,0xa);if(!Number[_0x56a1eb(0xc3)](_0x26cfde))return _0x26cfde;const _0x11b8b5=_0x525f2c[_0x56a1eb(0x243)](/\||;|,/)[_0x56a1eb(0xa2)](_0x569787=>_0x569787['trim']());let _0x14e84d=0x0;for(const _0x1a66f7 of _0x11b8b5){_0x14e84d|=_0x26f0de[_0x1a66f7];}return _0x14e84d;}function _0x26b042(_0x20a570,_0x441ff7){const _0x4a2811=_0x4d0553;_0x441ff7=_0x828de5(_0x20a570,_0x441ff7);const _0x155e44=[];if(!_0x20a570)return _0x155e44[_0x4a2811(0x283)]('\x20|\x20');for(const [_0x30d46d,_0x5176fa]of Object['entries'](_0x20a570)){typeof _0x441ff7===_0x4a2811(0x218)&&((_0x441ff7&_0x5176fa)===_0x5176fa&&_0x155e44[_0x4a2811(0x2b9)](_0x30d46d));}return _0x155e44['join']('\x20|\x20');}var _0x53518e;(function(_0x33dbf0){const _0x2d55d0=_0x4d0553;_0x33dbf0[_0x33dbf0[_0x2d55d0(0xbe)]=0x1]=_0x2d55d0(0xbe),_0x33dbf0[_0x33dbf0[_0x2d55d0(0x209)]=0x2]=_0x2d55d0(0x209),_0x33dbf0[_0x33dbf0[_0x2d55d0(0x237)]=0x4]='NodeClass',_0x33dbf0[_0x33dbf0['BrowseName']=0x8]=_0x2d55d0(0x22b),_0x33dbf0[_0x33dbf0[_0x2d55d0(0xb6)]=0x10]=_0x2d55d0(0xb6),_0x33dbf0[_0x33dbf0[_0x2d55d0(0x13e)]=0x20]=_0x2d55d0(0x13e);}(_0x53518e||(_0x53518e={})));function _0x5e31c8(_0xea21d7){const _0x52d638=_0x4d0553;switch(_0xea21d7){case _0x52d638(0x281):return _0x1c1846;case _0x52d638(0x253):return _0x4b005b;case'HasComponent':return _0x4a1cb1;case _0x52d638(0x11b):return _0xad0b6;case'HasSubtype':return _0x57c9f4;case'HasTypeDefinition':return _0x4f5470;}}const _0x23f5a5=()=>{const _0x85784b=_0x4d0553;$['widget'](_0x85784b(0xbf),{'options':{'namesToBits':{},'value':0x0},'_create'(){const _0x3286ac=_0x85784b;var _0x548e6a;const _0x2238fb=this;_0x2238fb[_0x3286ac(0x26e)]=this[_0x3286ac(0x15b)],_0x2238fb['$combo']=$(_0x3286ac(0x18e)),_0x2238fb[_0x3286ac(0x229)][_0x3286ac(0xd4)]('sterfive-combo-box'),(_0x548e6a=this['element'][0x0][_0x3286ac(0x17d)])===null||_0x548e6a===void 0x0?void 0x0:_0x548e6a[_0x3286ac(0x28f)](_0x2238fb[_0x3286ac(0x229)][0x0],this[_0x3286ac(0x15b)][0x0]),_0x2238fb[_0x3286ac(0x288)]=$(_0x3286ac(0x18e))['addClass'](_0x3286ac(0xbc)),_0x2238fb[_0x3286ac(0x229)][_0x3286ac(0x25c)](_0x2238fb[_0x3286ac(0x288)]),_0x2238fb[_0x3286ac(0x288)][_0x3286ac(0x25c)](_0x2238fb[_0x3286ac(0x26e)]),_0x2238fb[_0x3286ac(0x1ce)]=$(_0x3286ac(0x24e)),_0x2238fb[_0x3286ac(0x288)][_0x3286ac(0x25c)](_0x2238fb[_0x3286ac(0x1ce)]),_0x2238fb['$toggleTreeBtn']['on'](_0x3286ac(0x14b),()=>{const _0x327218=_0x3286ac;_0x2238fb[_0x327218(0x13d)][_0x327218(0x1b2)](),_0x2238fb[_0x327218(0x13d)]['is'](_0x327218(0x156))&&(_0x4721bf(),_0x2238fb[_0x327218(0x229)][_0x327218(0xe6)](_0x327218(0xe3))['each'](function(){const _0x216be9=_0x327218,_0x248111=$(this)[_0x216be9(0x164)](),_0x261138=_0x2238fb[_0x216be9(0x236)][_0x216be9(0x1f2)][_0x248111];if(_0x261138===undefined)throw new Error('Unknown\x20bit\x20name');(_0x2238fb[_0x216be9(0x236)][_0x216be9(0x216)]&_0x261138)===_0x261138?$(this)[_0x216be9(0xd4)](_0x216be9(0x1cf)):$(this)[_0x216be9(0x193)](_0x216be9(0x1cf));}),_0x2238fb[_0x327218(0x12a)]());}),_0x2238fb[_0x3286ac(0x13d)]=$(_0x3286ac(0x215))['hide']()[_0x3286ac(0x2bc)](this[_0x3286ac(0x15b)]),$[_0x3286ac(0x27a)](this[_0x3286ac(0x236)]['namesToBits'],_0x31bbdd=>{const _0x45009e=_0x3286ac,_0x4fbb22=$('<div\x20class=\x22custom-option\x22\x20data-value=\x22'+_0x31bbdd+'\x22>'+_0x45009e(0x24d)+_0x31bbdd+_0x45009e(0xa3));_0x2238fb['$dropdown']['append'](_0x4fbb22);}),_0x2238fb[_0x3286ac(0x13d)]['on'](_0x3286ac(0x14b),'.custom-option',function(){const _0x18e761=_0x3286ac;$(this)[_0x18e761(0x124)](_0x18e761(0x1cf));const _0x1e5b0d=$(this)[_0x18e761(0xd9)](_0x18e761(0x216));$(this)[_0x18e761(0x2bd)](_0x18e761(0x1cf))?_0x45b95f(_0x1e5b0d):_0x59f85b(_0x1e5b0d),_0x2238fb[_0x18e761(0x12a)]();}),_0x2238fb[_0x3286ac(0x229)]['append'](_0x2238fb[_0x3286ac(0x13d)]);const _0x4721bf=()=>{const _0x1ecbe0=_0x3286ac,_0x595199=this['element']['val']();_0x2238fb[_0x1ecbe0(0x236)][_0x1ecbe0(0x216)]=_0x828de5(_0x2238fb['options'][_0x1ecbe0(0x1f2)],_0x595199);},_0x45b95f=_0x2fd74c=>{const _0x3b8e21=_0x3286ac,_0x4e3eee=_0x2238fb[_0x3b8e21(0x236)]['namesToBits'][_0x2fd74c];if(_0x4e3eee===undefined)throw new Error(_0x3b8e21(0x17b));this[_0x3b8e21(0x236)][_0x3b8e21(0x216)]|=_0x4e3eee;},_0x59f85b=_0x16585b=>{const _0x2ee55c=_0x3286ac,_0x48900d=_0x2238fb[_0x2ee55c(0x236)][_0x2ee55c(0x1f2)][_0x16585b];if(_0x48900d===undefined)throw new Error(_0x2ee55c(0x17b));this[_0x2ee55c(0x236)]['value']&=~_0x48900d,this[_0x2ee55c(0x15b)][_0x2ee55c(0x207)](_0x26b042(_0x2238fb['options']['namesToBits'],this['options']['value']));};_0x4721bf();},'updateValue'(){const _0x592a69=_0x85784b,_0x57fe35=this;this['element'][_0x592a69(0x207)](_0x26b042(_0x57fe35['options'][_0x592a69(0x1f2)],this[_0x592a69(0x236)][_0x592a69(0x216)]));},'_destroy'(){const _0x137317=_0x85784b,_0x15c7bd=this;_0x15c7bd[_0x137317(0x13d)]['remove']();}});},_0x355769=(_0x388c52,_0x491266,_0x5ba129)=>_0x564956(void 0x0,[_0x388c52,_0x491266,_0x5ba129],void 0x0,function*({endpointNode:_0x236c5c,endpoint:_0x4490ed},_0x4a8f11,_0x270d8d){const _0x34c010=_0x4d0553,_0x2e70ee=Object['assign'](Object[_0x34c010(0xf1)]({},_0x270d8d),{'nodeId':_0x4a8f11,'resultMask':0x3f}),_0x156c8c=_0x1e9854('/browse'),_0x4c0192=yield fetch(_0x156c8c,{'method':_0x34c010(0x220),'body':JSON[_0x34c010(0x16a)]({'endpointNode':_0x236c5c,'endpoint':_0x4490ed,'browseDescription':_0x2e70ee}),'headers':{'Content-Type':_0x34c010(0xdf)}});if(_0x4c0192[_0x34c010(0x10b)]!==0xc8)return console['log']('fetching\x20failed\x20with\x20error',_0x4c0192['status'],_0x4c0192['statusText']),{'references':[]};const _0x4f1ef5=yield _0x4c0192[_0x34c010(0x10e)](),_0x98dfca=_0x4f1ef5['browseResult']['references']||[];return{'references':_0x98dfca};}),_0x3b7249=_0xefefde=>{const _0x1c69ca=_0x4d0553;switch(_0xefefde[_0x1c69ca(0x1bc)]){case _0x1c69ca(0x232):if(_0xefefde[_0x1c69ca(0x282)]===_0x1c1846);if(_0xefefde[_0x1c69ca(0x2a3)]===_0x21e276||_0xefefde[_0x1c69ca(0x282)]==='i=61')return{'icon':_0x1c69ca(0xcd),'color':_0x1c69ca(0x245)};return{'icon':_0x1c69ca(0x148),'color':'SeaGreen'};case _0x1c69ca(0xac):if(_0xefefde[_0x1c69ca(0x282)]===_0x4a1cb1)return{'icon':_0x1c69ca(0x205),'color':_0x1c69ca(0x135)};else return _0xefefde['referenceTypeId']===_0x4b005b?{'icon':'fa-list-alt','color':_0x1c69ca(0xdb)}:{'icon':_0x1c69ca(0x205),'color':'CadetBlue'};case _0x1c69ca(0x1d6):return{'icon':_0x1c69ca(0x208),'color':'SandyBrown'};case _0x1c69ca(0x280):return{'icon':_0x1c69ca(0x148),'color':'DarkOrange'};case'VariableType':return{'icon':'fa-sliders','color':_0x1c69ca(0x2c0)};case _0x1c69ca(0x13b):return{'icon':_0x1c69ca(0x27c),'color':_0x1c69ca(0xf3)};}return{'icon':_0x1c69ca(0x1d8),'color':_0x1c69ca(0x217)};},_0x23ec6a={'referenceTypeId':_0x5e31c8(_0x4d0553(0x11b)),'includeSubtypes':!![],'browseDirection':_0x29da0c[_0x4d0553(0xf2)],'nodeClassMask':_0x2ee42d['Variable']|_0x2ee42d[_0x4d0553(0x232)]|_0x2ee42d[_0x4d0553(0x1d6)],'resultMask':0x3f},_0x405615={'referenceTypeId':_0x5e31c8(_0x4d0553(0x281)),'includeSubtypes':!![],'browseDirection':_0x29da0c[_0x4d0553(0xf2)],'nodeClassMask':_0x2ee42d[_0x4d0553(0xac)]|_0x2ee42d[_0x4d0553(0x232)]|_0x2ee42d[_0x4d0553(0x1d6)],'resultMask':0x3f},_0x3077f2=(_0x50db5b,_0x2ea50e)=>_0x564956(void 0x0,[_0x50db5b,_0x2ea50e],void 0x0,function*({endpointNode:_0x1897b0,endpoint:_0x5cd36d},{nodeId:_0x445787,rootNodeId:_0x362a20,isType:_0x478a10}){const _0x1a5e58=_0x4d0553,_0x52f7e2=_0x1e9854(_0x1a5e58(0x1ae)),_0x1d93f6=yield fetch(_0x52f7e2,{'method':_0x1a5e58(0x220),'body':JSON[_0x1a5