PageSourceSearch

https://8apm.co.kr/ind-script/optimizer_user.php?filename=jY47DoAw…41aa25ab54a56717965bca5&t=1778467873&user=T

js 8apm.co.kr collected 2026-10-06 02:09:35 UTC 23,710 bytes, 623 lines download raw bytes

1// returnUrl 스토리지  
2$(window).ready(function(){
3    var cpnReferrer = document.referrer;
4    var cpnUrl = window.location.href;
5    var cpnOrigin = window.location.origin;
6    if(!cpnReferrer.includes("newcoupon")){//기본 접근 ex.) 쿠폰 다운로드를 통하지 않고 메뉴에서 로그인을 클릭, 장바구니담기 버튼을 통한 접근
7        if(!cpnUrl.includes("returnUrl") && cpnReferrer.includes(cpnOrigin) ){//returnUrl 값이 없는 접근&로그인페이지로 바로 접근이 아니라면
8            var returnGetStorage_direct = localStorage.getItem("returnCpnStorage");
9            if( cpnReferrer == returnGetStorage_direct ){
10                localStorage.setItem("returnLandingStorage", returnGetStorage_direct);
11            }else{
12                localStorage.setItem("returnLandingStorage", cpnReferrer);
13            }
14        }          
15    }else{//쿠폰 다운로드를 통한 로그인페이지 접근 시
16        // returnUrl 들어감
17        //opener_url 없을 시 메인 / 있다면 해당페이지
18
19        //'opener_url' 값이 있는 쿠폰다운로드라면 
20        if(cpnReferrer.includes("opener")){
21            localStorage.removeItem("returnLandingStorage");
22            localStorage.removeItem("returnCpnStorage");    
23            localStorage.removeItem("returnLogonCpnStorage");                
24        }        
25    }    
26});    
27 
28// placeholder
29$(function() {
30    function loginPlaceholder(){
31        if ($('.xans-member-login').val() != undefined) {
32            var loginId = $('#member_id').parent().attr('title');
33            $('#member_id').attr('placeholder', loginId);
34            $('#member_passwd').attr('placeholder', 'Password');
35        }
36    }
37    loginPlaceholder();
38});
39
40// keyboard
41$('.keyboard button').on('click', function(){
42    if($(this).hasClass('selected')==true){
43        $('.keyboard .btnKey').removeClass('selected');
44        $('.view div').hide();
45    }
46    else{
47        $('.keyboard .btnKey').removeClass('selected');
48        $('.view div').hide();
49        $(this).addClass('selected');
50        var key=$(this).attr('title');
51        $(this).parent().next().children('.'+key+'').show();
52    }
53});
54
55// toggle
56$('.ec-base-tab').each(function(){
57    var selected = $(this).find('> ul > li.selected > a');
58});
59
60$('body').on('click', '.ec-base-tab a', function(e){
61    var _target = $(this).attr('href');
62    if (_target == '#member') {
63        $('#member_login_module_id').show();
64        $('#order_history_nologin_id').hide();
65    } else {
66        $('#member_login_module_id').hide();
67        $('#order_history_nologin_id').show();
68    }
69    e.preventDefault();
70});
71/**
72 * hasClass
73 */
74function hasClass(element, className){
75    return (' ' + element.className + ' ').indexOf(' ' + className+ ' ') > -1;
76};
77
78/**
79 *  toggle
80 */
81function toggleClassAll(element, handler, className){
82    var _handler = document.querySelector(handler);
83    document.querySelectorAll(handler).forEach(function(item){
84        item.addEventListener('click', function(){
85            var _element = item.parentNode;
86            if ( hasClass( _element, className ) ) {
87                _element.classList.remove( className );
88            } else {
89                _element.classList.add( className );
90            }
91        })
92    })
93};
94
95/**
96 *  findElements
97 */
98function findElements(element, findElement){
99    var resultElements = [];
100    document.querySelectorAll(element).forEach(function(item){
101        var findElementList = item.querySelectorAll(findElement);
102        findElementList = Array.prototype.slice.call(findElementList);
103        resultElements = resultElements.concat(findElementList);
104    })
105    return resultElements;
106};
107
108/**
109 *  setAttributeAl
110 */
111function setAttributeAll(elements, name, value){
112    elements.forEach(function(item){
113        item.setAttribute(name, value);
114    })
115};
116
117/**
118 *  tooltip
119 */
120function setTooltipEvent(){
121    var input = findElements('.eTooltip', 'input');
122    input.forEach(function(item){
123        item.addEventListener('focusin', function(event){
124            var targetName = returnTargetName(event.target);
125            targetName.nextElementSibling.style.display = 'block'
126        });
127        item.addEventListener('focusout', function(event){
128            var targetName = returnTargetName(event.target);
129            targetName.nextElementSibling.style.display = 'none'
130        });
131    });
132}
133
134/**
135 *  tooltip input focus
136 */
137function returnTargetName(_this){
138    var ePlacename = _this.parentElement.getAttribute("class");
139    var targetName;
140    if(ePlacename == "ePlaceholder"){ //ePlaceholder supported
141        targetName = _this.parentElement;
142    }else{
143        targetName = _this;
144    }
145    return targetName;
146}
147
148/**
149 * window load
150 */
151window.addEventListener('load', function(){
152    if (document.querySelector('.eTooltip')){
153        setAttributeAll(findElements('.eTooltip', '.btnClose'),'tabIndex','-1');
154        setTooltipEvent();
155    }
156    if (document.querySelector('div.eToggle')){
157        toggleClassAll(false, 'div.eToggle .title', 'selected');
158    }
159});
160$(document).ready(function() {
161    /**
162     * 로그인폼 placeholder 추가
163     */
164    if ($('.xans-member-login').val() != undefined) {
165        $('#member_passwd').attr('placeholder', '비밀번호');
166    }	
167    
168	/**
169     * 비회원 주문조회페이지 placeholder 추가
170     */ 
171    if ($('.xans-myshop-orderhistorynologin').val() != undefined) {
172        $('#order_name').attr('placeholder', '주문자명');
173        $('#order_id').attr('placeholder', '주문번호(하이픈(-) 포함)');
174        $('#order_password').attr('placeholder', '비회원주문 비밀번호');
175    }
176    
177	/**
178     * 하단 에스크로 사용하면 출력
179     */
180	$("#footer .inner .bt_escrow").each(function(){
181		var bt_escrow = $(this).attr("data-ez-escrow");
182		if ( !bt_escrow == '' ) {
183			var bt_escrow_name = $("a img[data-ez-escrow-id="+ bt_escrow +"]", this).addClass('on');
184			$(this).css('display','flex');
185		}
186	});
187
188	/**
189     * 마이페이지 나의게시글 없을때 메시지 표시
190     */ 
191	$(".xans-myshop-boardpackage").each(function(){
192		var boardlist = $(".xans-myshop-boardlist table", this).length;
193		if ( boardlist == '0' ) {
194			$('.myshop_boardlist_empty').css('display','flex');
195		}
196	});
197
198    /**
199     * 헤더 컨트롤
200     */ 
201    var didScroll;
202
203    $(window).scroll(function(event){
204        didScroll = true;
205    });
206
207    setInterval(function() {
208        if (didScroll) {
209            hasScrolled();
210            didScroll = false;
211        }
212    }, 0);
213
214    function hasScrolled() {
215        var st = $(this).scrollTop();
216        if (st >= 30) {
217            $('header').removeClass('up').addClass('down');
218            $("header .h-bnr").hide()
219        } else {
220            if(st + $(window).height() < $(document).height()) {
221                $('header').removeClass('down').addClass('up');
222                $("header .h-bnr").show()
223            }
224        }
225        lastScrollTop = st;
226    }
227
228    /**
229     * gnb
230     */
231    $(document).on({
232        mouseenter: function(){
233            if($(this).find('menu').length > 0){
234                //$("header").addClass("down")
235                $(this).find("menu").show();
236            }
237        }, mouseleave: function(){
238            //$("header").removeClass("down")
239            $("header menu").hide();
240        }
241    }, 'header .gnb .gnb-box > ul > li');
242
243    /**
244     * MO GNB 오픈
245     */ 
246    $("header .h-fold").click(function(){
247        $(".side-menu").addClass("on")
248        $(".dim").show();
249        $("body").addClass("noscroll");
250    })
251    
252    $(".side-menu .close, .dim").click(function(){
253        $(".side-menu").removeClass("on")
254        $(".dim").hide();
255        $("body").removeClass("noscroll");
256    })
257
258    $(".side-menu .button_toggle").click(function(){
259        $(this).toggleClass("on");
260        $(this).next().slideToggle();
261    })
262
263    /**
264     * 퀵 모션
265     */ 
266    $(window).scroll(function(event){
267        if($(window).scrollTop() >= 30){
268            $(".footer-quick").addClass("on");
269        } else {
270            $(".footer-quick").removeClass("on");
271        }
272    });
273
274    /**
275     * content 높이 full
276     */ 
277    $(document).ready(function(){
278        const winH = $(window).innerHeight();
279        var footH = $("#footer").innerHeight();
280        var contentH = $("#contents").innerHeight();
281        var minH = winH-footH;
282
283        // body가 창높이 보다 낮을 시(푸터가 최하단이 아닌 중간에 있는 상태) 컨텐츠영역 최소높이 증가하여 푸터의 위치 조정
284        if( contentH < minH ){
285            $("#contents").css({ minHeight: minH, boxSizing: "border-box" });
286        }
287    });
288});
289
290/**
291 * 위아래 퀵 버튼
292 */ 
293function go_scroll_top()	{
294    $( 'html, body' ).stop().animate( { scrollTop : 0 } );
295    return false;
296}
297
298function go_scroll_bottom()	{
299    $( 'html, body' ).stop().animate( { scrollTop : $('html, body')[0].scrollHeight } );
300    return false;
301}
302
303// jQuery ready 함수로 자체 구현 자동완성 초기화
304$(document).ready(function() {
305    // 브라우저 기본 자동완성 비활성화
306    $('#keyword').attr('autocomplete', 'off');
307    $('#ec-product-searchdata-keyword').attr('autocomplete', 'off');
308    
309    var searchSource = [];
310    var autocompleteContainer = null;
311    
312    // 검색 소스 데이터 가져오기
313    if ($(".popup_search .key_autocomplete").length > 0) {
314        var rawText = $(".popup_search .key_autocomplete").text().trim();
315        if (rawText) {
316            // 원본 데이터만 저장 (표시용)
317            searchSource = rawText.split(',').map(item => item.trim()).filter(item => item);
318        }
319    }
320    
321    // 자동완성 컨테이너 생성
322    function createAutocompleteContainer() {
323        if (!autocompleteContainer) {
324            autocompleteContainer = $('<div class="custom-autocomplete" style="display:none; position:absolute; background:white; border:1px solid #ccc; overflow-y:auto; z-index:1000; box-shadow: 0 2px 8px rgba(0,0,0,0.15);"></div>');
325            $('body').append(autocompleteContainer);
326        }
327    }
328
329    // 자동완성 표시
330    function showAutocomplete(input, suggestions) {
331        if (suggestions.length === 0) {
332            hideAutocomplete();
333            return;
334        }
335
336        createAutocompleteContainer();
337        
338        var inputOffset = input.offset();
339        autocompleteContainer.css({
340            top: inputOffset.top + input.outerHeight(),
341            left: inputOffset.left,
342            width: input.outerWidth(),
343            display: 'block'
344        });
345
346        // 중복 제거 - Set을 사용하여 고유한 값만 유지
347        var uniqueSuggestions = [...new Set(suggestions)];
348
349        var html = '';
350        var inputValue = input.val().toLowerCase();
351        
352        uniqueSuggestions.forEach(function(suggestion, index) {
353            var highlightedText = suggestion;
354            if (inputValue) {
355                var regex = new RegExp('(' + inputValue.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + ')', 'gi');
356                highlightedText = suggestion.replace(regex, '<strong>$1</strong>');
357            }
358            html += '<div class="autocomplete-item" data-value="' + suggestion + '" style="padding:8px 12px 8px 52px; cursor:pointer; border-bottom:1px solid #eee; font-size:14px;">' + highlightedText + '</div>';
359        });
360        
361        // 닫기 버튼 추가
362        html += '<div class="autocomplete-close" style="text-align:center; cursor:pointer;"></div>';
363        
364        autocompleteContainer.html(html);
365    }
366
367    // 자동완성 숨기기
368    function hideAutocomplete() {
369        if (autocompleteContainer) {
370            autocompleteContainer.hide();
371        }
372    }
373
374    // 키워드 입력 이벤트
375    $('#keyword, #ec-product-searchdata-keyword').on('input', function() {
376        var inputValue = $(this).val().trim();
377        
378        if (inputValue.length < 1) {
379            hideAutocomplete();
380            return;
381        }
382
383        var filteredSuggestions = searchSource.filter(function(item) {
384            var itemLower = item.toLowerCase();
385            var inputLower = inputValue.toLowerCase();
386            
387            // 1. 기본 포함 검색
388            if (itemLower.includes(inputLower)) {
389                return true;
390            }
391            
392            // 2. 띄어쓰기 무시 검색 (사용자 입력에서 띄어쓰기 제거)
393            var inputNoSpace = inputLower.replace(/\s+/g, '');
394            var itemNoSpace = itemLower.replace(/\s+/g, '');
395            if (itemNoSpace.includes(inputNoSpace)) {
396                return true;
397            }
398            
399            // 3. 부분 단어 매칭 (띄어쓰기로 분리된 각 단어 검색)
400            var inputWords = inputLower.split(/\s+/).filter(word => word.length > 0);
401            if (inputWords.length > 1) {
402                var itemWords = itemLower.split(/\s+/);
403                var matchCount = 0;
404                inputWords.forEach(function(inputWord) {
405                    if (itemWords.some(function(itemWord) {
406                        return itemWord.includes(inputWord);
407                    })) {
408                        matchCount++;
409                    }
410                });
411                return matchCount >= Math.min(inputWords.length, 2); // 최소 2개 단어 매칭
412            }
413            
414            return false;
415        });
416
417        showAutocomplete($(this), filteredSuggestions);
418    });
419
420    // 자동완성 아이템 클릭 이벤트
421    $(document).on('click', '.autocomplete-item', function() {
422        var selectedValue = $(this).data('value');
423        $('#keyword, #ec-product-searchdata-keyword').val(selectedValue);
424        hideAutocomplete();
425        setTimeout(submit_search, 50);
426    });
427
428    // 닫기 버튼 클릭 이벤트
429    $(document).on('click', '.autocomplete-close', function() {
430        hideAutocomplete();
431    });
432
433    // 다른 곳 클릭시 자동완성 숨기기
434    $(document).on('click', function(e) {
435        if (!$(e.target).closest('#keyword, #ec-product-searchdata-keyword, .custom-autocomplete').length) {
436            hideAutocomplete();
437        }
438    });
439
440    // ESC 키로 자동완성 숨기기, Enter 키로 검색
441    $('#keyword, #ec-product-searchdata-keyword').on('keydown', function(e) {
442        if (e.keyCode === 27) { // ESC key
443            hideAutocomplete();
444        } else if (e.keyCode === 13) { // Enter key
445            hideAutocomplete();
446            submit_search();
447        }
448    });
449});
450// 8apm.co.kr 도메인 접속 시 drdayr.co.kr 도메인으로 리다이렉트
451function redirectToDrdayr() {
452    // 현재 접속한 호스트명(도메인) 가져오기
453    var currentHost = window.location.hostname;
454
455    // 접속한 도메인이 '8apm.co.kr' 또는 'www.8apm.co.kr'인 경우
456    if (currentHost === '8apm.co.kr' || currentHost === 'www.8apm.co.kr') {
457        // 현재 전체 URL을 가져와서 도메인 부분만 새 도메인으로 교체
458        var currentUrl = window.location.href;
459        var newUrl = currentUrl.replace(/8apm\.co\.kr/i, 'drdayr.co.kr');
460        
461        // 새 도메인으로 이동 (히스토리를 남기지 않아 뒤로가기 오류 방지)
462        window.location.replace(newUrl);
463    }
464}
465// 광고 이슈로 인한 일시중지 (추후 다시 활성화)
466redirectToDrdayr(); 
467
468//window popup script
469function winPop(url) {
470    window.open(url, "popup", "width=300,height=300,left=10,top=10,resizable=no,scrollbars=no");
471}
472/**
473 * document.location.href split
474 * return array Param
475 */
476function getQueryString(sKey)
477{
478    var sQueryString = document.location.search.substring(1);
479    var aParam       = {};
480
481    if (sQueryString) {
482        var aFields = sQueryString.split("&");
483        var aField  = [];
484        for(var i=0; i<aFields.length; i++){
485            aField = aFields[i].split('=');
486            aParam[aField[0]] = aField[1];            
487        }
488    }
489
490    aParam.page = aParam.page ? aParam.page : 1;
491    return sKey ? aParam[sKey] : aParam;
492};
493
494/**
495  *  구매버튼
496*/
497var globalBuyBtnScrollFunc = function() {
498    // 구매버튼 관련변수
499    var sFixId = $('#orderFixItem').length > 0  ? 'orderFixItem' : 'fixedActionButton',
500        $area = $('#orderFixArea'),
501        $item = $('#' + sFixId + '').not($area);
502
503    $(window).scroll(function(){
504        try {
505             // 구매버튼 관련변수
506            var iCurrentHeightPos = $(this).scrollTop() + $(this).height(),
507                iButtonHeightPos = $item.offset().top;
508
509            if (iCurrentHeightPos > iButtonHeightPos || iButtonHeightPos < $(this).scrollTop() + $item.height()) {
510                if (iButtonHeightPos < $(this).scrollTop() - $item.height()) {
511                    $area.fadeIn('fast');
512                } else {
513                    $area.hide();
514                }
515            } else {
516                $area.fadeIn('fast');
517            }
518        } catch(e) { }
519    });
520};
521
522$(function(){
523    // tab
524    $.eTab = function(ul) {
525        $(ul).find('a').on('click', function() {
526            var _li = $(this).parent('li').addClass('selected').siblings().removeClass('selected'),
527                _target = $(this).attr('href'),
528                _siblings = '.' + $(_target).attr('class');
529            $(_target).show().siblings(_siblings).hide();
530            return false
531        });
532    }
533    if ( window.call_eTab ) {
534        call_eTab();
535    };
536    globalBuyBtnScrollFunc();
537});
538$(function(){
539    if (typeof(EC_SHOP_MULTISHOP_SHIPPING) != "undefined") {
540        var sShippingCountryCode4Cookie = 'shippingCountryCode';
541        var bShippingCountryProc = false;
542
543        // 배송국가 선택 설정이 사용안함이면 숨김
544        if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === false) {
545            $('.xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist').hide();
546            $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption .xans-layout-multishoplistmultioptioncountry').hide();
547        } else {
548            $('.thumb .xans-layout-multishoplistitem').hide();
549            var aShippingCountryCode = document.cookie.match('(^|;) ?'+sShippingCountryCode4Cookie+'=([^;]*)(;|$)');
550            if (typeof(aShippingCountryCode) != 'undefined' && aS
550hippingCountryCode != null && aShippingCountryCode.length > 2) {
551                var sShippingCountryValue = aShippingCountryCode[2];
552            }
553
554            // query string으로 넘어 온 배송국가 값이 있다면, 그 값을 적용함
555            var aHrefCountryValue = decodeURIComponent(location.href).split("/?country=");
556
557            if (aHrefCountryValue.length == 2) {
558                var sShippingCountryValue = aHrefCountryValue[1];
559            }
560
561            // 메인 페이지에서 국가선택을 안한 경우, 그 외의 페이지에서 셋팅된 값이 안 나오는 현상 처리
562            if (location.href.split("/").length != 4 && $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val()) {
563                $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join(""));
564
565                if ($("#f_country").length > 0 && location.href.indexOf("orderform.html") > -1) {
566                    $("#f_country").val($(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val());
567                }
568            }
569            if (typeof(sShippingCountryValue) != "undefined" && sShippingCountryValue != "" && sShippingCountryValue != null) {
570                sShippingCountryValue = sShippingCountryValue.split("#")[0];
571                var bShippingCountryProc = true;
572
573                $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val(sShippingCountryValue);
574                $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join(""));
575                var expires = new Date();
576                expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30일간 쿠키 유지
577                document.cookie = sShippingCountryCode4Cookie+'=' + $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val() +';path=/'+ ';expires=' + expires.toUTCString();
578                if ($("#f_country").length > 0 && location.href.indexOf("orderform.html") > -1) {
579                    $("#f_country").val(sShippingCountryValue).change();
580                }
581            }
582        }
583        // 언어선택 설정이 사용안함이면 숨김
584        if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingLanguageSelection === false) {
585            $('.xans-layout-multishopshipping .xans-layout-multishopshippinglanguagelist').hide();
586            $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption .xans-layout-multishoplistmultioptionlanguage').hide();
587        } else {
588            $('.thumb .xans-layout-multishoplistitem').hide();
589        }
590
591        // 배송국가 및 언어 설정이 둘 다 사용안함이면 숨김
592        if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShipping === false) {
593            $(".xans-layout-multishopshipping").hide();
594            $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption').hide();
595        } else if (bShippingCountryProc === false && location.href.split("/").length == 4) { // 배송국가 값을 처리한 적이 없고, 메인화면일 때만 선택 레이어를 띄움
596            var sShippingCountryValue = $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val();
597            $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val(sShippingCountryValue);
598            $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join(""));
599            // 배송국가 선택을 사용해야 레이어를 보이게 함
600            if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === true) {
601                $(".xans-layout-multishopshipping").show();
602            }
603        }
604
605        $(".xans-layout-multishopshipping .btnClose").on("click", function() {
606            $(".xans-layout-multishopshipping").hide();
607        });
608
609        $(".xans-layout-multishopshipping .ec-base-button a").on("click", function() {
610            var expires = new Date();
611            expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30일간 쿠키 유지
612            document.cookie = sShippingCountryCode4Cookie+'=' + $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val() +';path=/'+ ';expires=' + expires.toUTCString();
613
614            // 도메인 문제로 쿠키로 배송국가 설정이 안 되는 경우를 위해 query string으로 배송국가 값
614을 넘김
615            var sQuerySting = (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === false) ? "" : "/?country="+encodeURIComponent($(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val());
616
617            location.href = '//'+$(".xans-layout-multishopshipping .xans-layout-multishopshippinglanguagelist").val()+sQuerySting;
618        });
619        $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a").on("click", function() {
620            $(".xans-layout-multishopshipping").show();
621        });
622    }
623});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.